Skip to content

Commit 143e0ef

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 c5adf35 commit 143e0ef

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
@@ -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]
82838350
fn parse_drop_operator_family() {
82848351
for if_exists in [true, false] {

0 commit comments

Comments
 (0)