@@ -8060,6 +8060,73 @@ fn parse_alter_operator_class() {
80608060 . is_err( ) ) ;
80618061}
80628062
8063+ #[ test]
8064+ fn parse_create_and_alter_text_search_failure_cases ( ) {
8065+ let sql_cases = [
8066+ "CREATE TEXT SEARCH DICTIONARY alt_ts_dict1 (template=simple)" ,
8067+ "CREATE TEXT SEARCH DICTIONARY alt_ts_dict2 (template=simple)" ,
8068+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 RENAME TO alt_ts_dict2" ,
8069+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 RENAME TO alt_ts_dict3" ,
8070+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict2 OWNER TO regress_alter_generic_user2" ,
8071+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict2 OWNER TO regress_alter_generic_user3" ,
8072+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict2 SET SCHEMA alt_nsp2" ,
8073+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict3 RENAME TO alt_ts_dict4" ,
8074+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 RENAME TO alt_ts_dict4" ,
8075+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict3 OWNER TO regress_alter_generic_user2" ,
8076+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict3 SET SCHEMA alt_nsp2" ,
8077+ "CREATE TEXT SEARCH CONFIGURATION alt_ts_conf1 (copy=english)" ,
8078+ "CREATE TEXT SEARCH CONFIGURATION alt_ts_conf2 (copy=english)" ,
8079+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 RENAME TO alt_ts_conf2" ,
8080+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 RENAME TO alt_ts_conf3" ,
8081+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf2 OWNER TO regress_alter_generic_user2" ,
8082+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf2 OWNER TO regress_alter_generic_user3" ,
8083+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf2 SET SCHEMA alt_nsp2" ,
8084+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf3 RENAME TO alt_ts_conf4" ,
8085+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 RENAME TO alt_ts_conf4" ,
8086+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf3 OWNER TO regress_alter_generic_user2" ,
8087+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf3 SET SCHEMA alt_nsp2" ,
8088+ "CREATE TEXT SEARCH TEMPLATE alt_ts_temp1 (lexize=dsimple_lexize)" ,
8089+ "CREATE TEXT SEARCH TEMPLATE alt_ts_temp2 (lexize=dsimple_lexize)" ,
8090+ "ALTER TEXT SEARCH TEMPLATE alt_ts_temp1 RENAME TO alt_ts_temp2" ,
8091+ "ALTER TEXT SEARCH TEMPLATE alt_ts_temp1 RENAME TO alt_ts_temp3" ,
8092+ "ALTER TEXT SEARCH TEMPLATE alt_ts_temp2 SET SCHEMA alt_nsp2" ,
8093+ "CREATE TEXT SEARCH TEMPLATE tstemp_case (\" Init\" = init_function)" ,
8094+ "CREATE TEXT SEARCH PARSER alt_ts_prs1 (start = prsd_start, gettoken = prsd_nexttoken, end = prsd_end, lextypes = prsd_lextype)" ,
8095+ "CREATE TEXT SEARCH PARSER alt_ts_prs2 (start = prsd_start, gettoken = prsd_nexttoken, end = prsd_end, lextypes = prsd_lextype)" ,
8096+ "ALTER TEXT SEARCH PARSER alt_ts_prs1 RENAME TO alt_ts_prs2" ,
8097+ "ALTER TEXT SEARCH PARSER alt_ts_prs1 RENAME TO alt_ts_prs3" ,
8098+ "ALTER TEXT SEARCH PARSER alt_ts_prs2 SET SCHEMA alt_nsp2" ,
8099+ "CREATE TEXT SEARCH PARSER tspars_case (\" Start\" = start_function)" ,
8100+ ] ;
8101+
8102+ for sql in sql_cases {
8103+ if let Err ( err) = pg ( ) . parse_sql_statements ( sql) {
8104+ panic ! ( "Failed to parse `{sql}`: {err}" ) ;
8105+ }
8106+ }
8107+
8108+ // Object type must be an unquoted keyword-like token in this position.
8109+ assert ! ( pg( )
8110+ . parse_sql_statements( "CREATE TEXT SEARCH \" DICTIONARY\" d (template = simple)" )
8111+ . is_err( ) ) ;
8112+
8113+ // CREATE options are key-value pairs in PostgreSQL syntax.
8114+ assert ! ( pg( )
8115+ . parse_sql_statements( "CREATE TEXT SEARCH DICTIONARY d (template)" )
8116+ . is_err( ) ) ;
8117+
8118+ // CREATE TEXT SEARCH does not support generic CREATE modifiers.
8119+ assert ! ( pg( )
8120+ . parse_sql_statements( "CREATE OR REPLACE TEXT SEARCH DICTIONARY d (template = simple)" )
8121+ . is_err( ) ) ;
8122+ assert ! ( pg( )
8123+ . parse_sql_statements( "CREATE OR ALTER TEXT SEARCH DICTIONARY d (template = simple)" )
8124+ . is_err( ) ) ;
8125+ assert ! ( pg( )
8126+ . parse_sql_statements( "CREATE TEMP TEXT SEARCH DICTIONARY d (template = simple)" )
8127+ . is_err( ) ) ;
8128+ }
8129+
80638130#[ test]
80648131fn parse_drop_operator_family ( ) {
80658132 for if_exists in [ true , false ] {
0 commit comments