@@ -8495,6 +8495,73 @@ fn parse_alter_function_and_aggregate() {
84958495 . is_err( ) ) ;
84968496}
84978497
8498+ #[ test]
8499+ fn parse_create_and_alter_text_search_failure_cases ( ) {
8500+ let sql_cases = [
8501+ "CREATE TEXT SEARCH DICTIONARY alt_ts_dict1 (template=simple)" ,
8502+ "CREATE TEXT SEARCH DICTIONARY alt_ts_dict2 (template=simple)" ,
8503+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 RENAME TO alt_ts_dict2" ,
8504+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 RENAME TO alt_ts_dict3" ,
8505+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict2 OWNER TO regress_alter_generic_user2" ,
8506+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict2 OWNER TO regress_alter_generic_user3" ,
8507+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict2 SET SCHEMA alt_nsp2" ,
8508+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict3 RENAME TO alt_ts_dict4" ,
8509+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 RENAME TO alt_ts_dict4" ,
8510+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict3 OWNER TO regress_alter_generic_user2" ,
8511+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict3 SET SCHEMA alt_nsp2" ,
8512+ "CREATE TEXT SEARCH CONFIGURATION alt_ts_conf1 (copy=english)" ,
8513+ "CREATE TEXT SEARCH CONFIGURATION alt_ts_conf2 (copy=english)" ,
8514+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 RENAME TO alt_ts_conf2" ,
8515+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 RENAME TO alt_ts_conf3" ,
8516+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf2 OWNER TO regress_alter_generic_user2" ,
8517+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf2 OWNER TO regress_alter_generic_user3" ,
8518+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf2 SET SCHEMA alt_nsp2" ,
8519+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf3 RENAME TO alt_ts_conf4" ,
8520+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 RENAME TO alt_ts_conf4" ,
8521+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf3 OWNER TO regress_alter_generic_user2" ,
8522+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf3 SET SCHEMA alt_nsp2" ,
8523+ "CREATE TEXT SEARCH TEMPLATE alt_ts_temp1 (lexize=dsimple_lexize)" ,
8524+ "CREATE TEXT SEARCH TEMPLATE alt_ts_temp2 (lexize=dsimple_lexize)" ,
8525+ "ALTER TEXT SEARCH TEMPLATE alt_ts_temp1 RENAME TO alt_ts_temp2" ,
8526+ "ALTER TEXT SEARCH TEMPLATE alt_ts_temp1 RENAME TO alt_ts_temp3" ,
8527+ "ALTER TEXT SEARCH TEMPLATE alt_ts_temp2 SET SCHEMA alt_nsp2" ,
8528+ "CREATE TEXT SEARCH TEMPLATE tstemp_case (\" Init\" = init_function)" ,
8529+ "CREATE TEXT SEARCH PARSER alt_ts_prs1 (start = prsd_start, gettoken = prsd_nexttoken, end = prsd_end, lextypes = prsd_lextype)" ,
8530+ "CREATE TEXT SEARCH PARSER alt_ts_prs2 (start = prsd_start, gettoken = prsd_nexttoken, end = prsd_end, lextypes = prsd_lextype)" ,
8531+ "ALTER TEXT SEARCH PARSER alt_ts_prs1 RENAME TO alt_ts_prs2" ,
8532+ "ALTER TEXT SEARCH PARSER alt_ts_prs1 RENAME TO alt_ts_prs3" ,
8533+ "ALTER TEXT SEARCH PARSER alt_ts_prs2 SET SCHEMA alt_nsp2" ,
8534+ "CREATE TEXT SEARCH PARSER tspars_case (\" Start\" = start_function)" ,
8535+ ] ;
8536+
8537+ for sql in sql_cases {
8538+ if let Err ( err) = pg ( ) . parse_sql_statements ( sql) {
8539+ panic ! ( "Failed to parse `{sql}`: {err}" ) ;
8540+ }
8541+ }
8542+
8543+ // Object type must be an unquoted keyword-like token in this position.
8544+ assert ! ( pg( )
8545+ . parse_sql_statements( "CREATE TEXT SEARCH \" DICTIONARY\" d (template = simple)" )
8546+ . is_err( ) ) ;
8547+
8548+ // CREATE options are key-value pairs in PostgreSQL syntax.
8549+ assert ! ( pg( )
8550+ . parse_sql_statements( "CREATE TEXT SEARCH DICTIONARY d (template)" )
8551+ . is_err( ) ) ;
8552+
8553+ // CREATE TEXT SEARCH does not support generic CREATE modifiers.
8554+ assert ! ( pg( )
8555+ . parse_sql_statements( "CREATE OR REPLACE TEXT SEARCH DICTIONARY d (template = simple)" )
8556+ . is_err( ) ) ;
8557+ assert ! ( pg( )
8558+ . parse_sql_statements( "CREATE OR ALTER TEXT SEARCH DICTIONARY d (template = simple)" )
8559+ . is_err( ) ) ;
8560+ assert ! ( pg( )
8561+ . parse_sql_statements( "CREATE TEMP TEXT SEARCH DICTIONARY d (template = simple)" )
8562+ . is_err( ) ) ;
8563+ }
8564+
84988565#[ test]
84998566fn parse_drop_operator_family ( ) {
85008567 for if_exists in [ true , false ] {
0 commit comments