@@ -8279,6 +8279,73 @@ fn parse_alter_function_and_aggregate() {
82798279 . is_err( ) ) ;
82808280}
82818281
8282+ #[ test]
8283+ fn parse_create_and_alter_text_search_failure_cases ( ) {
8284+ let sql_cases = [
8285+ "CREATE TEXT SEARCH DICTIONARY alt_ts_dict1 (template=simple)" ,
8286+ "CREATE TEXT SEARCH DICTIONARY alt_ts_dict2 (template=simple)" ,
8287+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 RENAME TO alt_ts_dict2" ,
8288+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 RENAME TO alt_ts_dict3" ,
8289+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict2 OWNER TO regress_alter_generic_user2" ,
8290+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict2 OWNER TO regress_alter_generic_user3" ,
8291+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict2 SET SCHEMA alt_nsp2" ,
8292+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict3 RENAME TO alt_ts_dict4" ,
8293+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 RENAME TO alt_ts_dict4" ,
8294+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict3 OWNER TO regress_alter_generic_user2" ,
8295+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict3 SET SCHEMA alt_nsp2" ,
8296+ "CREATE TEXT SEARCH CONFIGURATION alt_ts_conf1 (copy=english)" ,
8297+ "CREATE TEXT SEARCH CONFIGURATION alt_ts_conf2 (copy=english)" ,
8298+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 RENAME TO alt_ts_conf2" ,
8299+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 RENAME TO alt_ts_conf3" ,
8300+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf2 OWNER TO regress_alter_generic_user2" ,
8301+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf2 OWNER TO regress_alter_generic_user3" ,
8302+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf2 SET SCHEMA alt_nsp2" ,
8303+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf3 RENAME TO alt_ts_conf4" ,
8304+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 RENAME TO alt_ts_conf4" ,
8305+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf3 OWNER TO regress_alter_generic_user2" ,
8306+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf3 SET SCHEMA alt_nsp2" ,
8307+ "CREATE TEXT SEARCH TEMPLATE alt_ts_temp1 (lexize=dsimple_lexize)" ,
8308+ "CREATE TEXT SEARCH TEMPLATE alt_ts_temp2 (lexize=dsimple_lexize)" ,
8309+ "ALTER TEXT SEARCH TEMPLATE alt_ts_temp1 RENAME TO alt_ts_temp2" ,
8310+ "ALTER TEXT SEARCH TEMPLATE alt_ts_temp1 RENAME TO alt_ts_temp3" ,
8311+ "ALTER TEXT SEARCH TEMPLATE alt_ts_temp2 SET SCHEMA alt_nsp2" ,
8312+ "CREATE TEXT SEARCH TEMPLATE tstemp_case (\" Init\" = init_function)" ,
8313+ "CREATE TEXT SEARCH PARSER alt_ts_prs1 (start = prsd_start, gettoken = prsd_nexttoken, end = prsd_end, lextypes = prsd_lextype)" ,
8314+ "CREATE TEXT SEARCH PARSER alt_ts_prs2 (start = prsd_start, gettoken = prsd_nexttoken, end = prsd_end, lextypes = prsd_lextype)" ,
8315+ "ALTER TEXT SEARCH PARSER alt_ts_prs1 RENAME TO alt_ts_prs2" ,
8316+ "ALTER TEXT SEARCH PARSER alt_ts_prs1 RENAME TO alt_ts_prs3" ,
8317+ "ALTER TEXT SEARCH PARSER alt_ts_prs2 SET SCHEMA alt_nsp2" ,
8318+ "CREATE TEXT SEARCH PARSER tspars_case (\" Start\" = start_function)" ,
8319+ ] ;
8320+
8321+ for sql in sql_cases {
8322+ if let Err ( err) = pg ( ) . parse_sql_statements ( sql) {
8323+ panic ! ( "Failed to parse `{sql}`: {err}" ) ;
8324+ }
8325+ }
8326+
8327+ // Object type must be an unquoted keyword-like token in this position.
8328+ assert ! ( pg( )
8329+ . parse_sql_statements( "CREATE TEXT SEARCH \" DICTIONARY\" d (template = simple)" )
8330+ . is_err( ) ) ;
8331+
8332+ // CREATE options are key-value pairs in PostgreSQL syntax.
8333+ assert ! ( pg( )
8334+ . parse_sql_statements( "CREATE TEXT SEARCH DICTIONARY d (template)" )
8335+ . is_err( ) ) ;
8336+
8337+ // CREATE TEXT SEARCH does not support generic CREATE modifiers.
8338+ assert ! ( pg( )
8339+ . parse_sql_statements( "CREATE OR REPLACE TEXT SEARCH DICTIONARY d (template = simple)" )
8340+ . is_err( ) ) ;
8341+ assert ! ( pg( )
8342+ . parse_sql_statements( "CREATE OR ALTER TEXT SEARCH DICTIONARY d (template = simple)" )
8343+ . is_err( ) ) ;
8344+ assert ! ( pg( )
8345+ . parse_sql_statements( "CREATE TEMP TEXT SEARCH DICTIONARY d (template = simple)" )
8346+ . is_err( ) ) ;
8347+ }
8348+
82828349#[ test]
82838350fn parse_drop_operator_family ( ) {
82848351 for if_exists in [ true , false ] {
0 commit comments