Skip to content

Commit 93b95ef

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 29d49fa commit 93b95ef

1 file changed

Lines changed: 67 additions & 0 deletions

File tree

tests/sqlparser_postgres.rs

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

0 commit comments

Comments
 (0)