@@ -7932,6 +7932,73 @@ fn parse_alter_operator_class() {
79327932 . is_err( ) ) ;
79337933}
79347934
7935+ #[ test]
7936+ fn parse_create_and_alter_text_search_failure_cases ( ) {
7937+ let sql_cases = [
7938+ "CREATE TEXT SEARCH DICTIONARY alt_ts_dict1 (template=simple)" ,
7939+ "CREATE TEXT SEARCH DICTIONARY alt_ts_dict2 (template=simple)" ,
7940+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 RENAME TO alt_ts_dict2" ,
7941+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 RENAME TO alt_ts_dict3" ,
7942+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict2 OWNER TO regress_alter_generic_user2" ,
7943+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict2 OWNER TO regress_alter_generic_user3" ,
7944+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict2 SET SCHEMA alt_nsp2" ,
7945+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict3 RENAME TO alt_ts_dict4" ,
7946+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict1 RENAME TO alt_ts_dict4" ,
7947+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict3 OWNER TO regress_alter_generic_user2" ,
7948+ "ALTER TEXT SEARCH DICTIONARY alt_ts_dict3 SET SCHEMA alt_nsp2" ,
7949+ "CREATE TEXT SEARCH CONFIGURATION alt_ts_conf1 (copy=english)" ,
7950+ "CREATE TEXT SEARCH CONFIGURATION alt_ts_conf2 (copy=english)" ,
7951+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 RENAME TO alt_ts_conf2" ,
7952+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 RENAME TO alt_ts_conf3" ,
7953+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf2 OWNER TO regress_alter_generic_user2" ,
7954+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf2 OWNER TO regress_alter_generic_user3" ,
7955+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf2 SET SCHEMA alt_nsp2" ,
7956+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf3 RENAME TO alt_ts_conf4" ,
7957+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf1 RENAME TO alt_ts_conf4" ,
7958+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf3 OWNER TO regress_alter_generic_user2" ,
7959+ "ALTER TEXT SEARCH CONFIGURATION alt_ts_conf3 SET SCHEMA alt_nsp2" ,
7960+ "CREATE TEXT SEARCH TEMPLATE alt_ts_temp1 (lexize=dsimple_lexize)" ,
7961+ "CREATE TEXT SEARCH TEMPLATE alt_ts_temp2 (lexize=dsimple_lexize)" ,
7962+ "ALTER TEXT SEARCH TEMPLATE alt_ts_temp1 RENAME TO alt_ts_temp2" ,
7963+ "ALTER TEXT SEARCH TEMPLATE alt_ts_temp1 RENAME TO alt_ts_temp3" ,
7964+ "ALTER TEXT SEARCH TEMPLATE alt_ts_temp2 SET SCHEMA alt_nsp2" ,
7965+ "CREATE TEXT SEARCH TEMPLATE tstemp_case (\" Init\" = init_function)" ,
7966+ "CREATE TEXT SEARCH PARSER alt_ts_prs1 (start = prsd_start, gettoken = prsd_nexttoken, end = prsd_end, lextypes = prsd_lextype)" ,
7967+ "CREATE TEXT SEARCH PARSER alt_ts_prs2 (start = prsd_start, gettoken = prsd_nexttoken, end = prsd_end, lextypes = prsd_lextype)" ,
7968+ "ALTER TEXT SEARCH PARSER alt_ts_prs1 RENAME TO alt_ts_prs2" ,
7969+ "ALTER TEXT SEARCH PARSER alt_ts_prs1 RENAME TO alt_ts_prs3" ,
7970+ "ALTER TEXT SEARCH PARSER alt_ts_prs2 SET SCHEMA alt_nsp2" ,
7971+ "CREATE TEXT SEARCH PARSER tspars_case (\" Start\" = start_function)" ,
7972+ ] ;
7973+
7974+ for sql in sql_cases {
7975+ if let Err ( err) = pg ( ) . parse_sql_statements ( sql) {
7976+ panic ! ( "Failed to parse `{sql}`: {err}" ) ;
7977+ }
7978+ }
7979+
7980+ // Object type must be an unquoted keyword-like token in this position.
7981+ assert ! ( pg( )
7982+ . parse_sql_statements( "CREATE TEXT SEARCH \" DICTIONARY\" d (template = simple)" )
7983+ . is_err( ) ) ;
7984+
7985+ // CREATE options are key-value pairs in PostgreSQL syntax.
7986+ assert ! ( pg( )
7987+ . parse_sql_statements( "CREATE TEXT SEARCH DICTIONARY d (template)" )
7988+ . is_err( ) ) ;
7989+
7990+ // CREATE TEXT SEARCH does not support generic CREATE modifiers.
7991+ assert ! ( pg( )
7992+ . parse_sql_statements( "CREATE OR REPLACE TEXT SEARCH DICTIONARY d (template = simple)" )
7993+ . is_err( ) ) ;
7994+ assert ! ( pg( )
7995+ . parse_sql_statements( "CREATE OR ALTER TEXT SEARCH DICTIONARY d (template = simple)" )
7996+ . is_err( ) ) ;
7997+ assert ! ( pg( )
7998+ . parse_sql_statements( "CREATE TEMP TEXT SEARCH DICTIONARY d (template = simple)" )
7999+ . is_err( ) ) ;
8000+ }
8001+
79358002#[ test]
79368003fn parse_drop_operator_family ( ) {
79378004 for if_exists in [ true , false ] {
0 commit comments