Skip to content

Commit 2abd77c

Browse files
tests: add PostgreSQL text search DDL regression coverage
Add regression coverage for the provided CREATE/ALTER TEXT SEARCH\nstatements and guardrails for rejected forms (quoted object type,\nmissing key/value option syntax, and unsupported CREATE modifiers).
1 parent ea543eb commit 2abd77c

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

tests/sqlparser_postgres.rs

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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]
79368003
fn parse_drop_operator_family() {
79378004
for if_exists in [true, false] {

0 commit comments

Comments
 (0)