Skip to content

Commit 25e267c

Browse files
test(postgres): cover ALTER FUNCTION/AGGREGATE variants
Add a focused PostgreSQL test matrix for ALTER FUNCTION and ALTER AGGREGATE covering valid forms, canonical output, and strict-parity rejection cases.
1 parent 0a4263c commit 25e267c

File tree

1 file changed

+219
-0
lines changed

1 file changed

+219
-0
lines changed

tests/sqlparser_postgres.rs

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7932,6 +7932,225 @@ fn parse_alter_operator_class() {
79327932
.is_err());
79337933
}
79347934

7935+
#[test]
7936+
fn parse_alter_function_and_aggregate() {
7937+
for (sql, expected) in [
7938+
(
7939+
"ALTER AGGREGATE alt_func1(int) RENAME TO alt_func3",
7940+
"ALTER AGGREGATE alt_func1(INT) RENAME TO alt_func3",
7941+
),
7942+
(
7943+
"ALTER AGGREGATE alt_func1(int) OWNER TO regress_alter_generic_user3",
7944+
"ALTER AGGREGATE alt_func1(INT) OWNER TO regress_alter_generic_user3",
7945+
),
7946+
(
7947+
"ALTER AGGREGATE alt_func1(int) SET SCHEMA alt_nsp2",
7948+
"ALTER AGGREGATE alt_func1(INT) SET SCHEMA alt_nsp2",
7949+
),
7950+
(
7951+
"ALTER AGGREGATE alt_agg1(int) RENAME TO alt_agg2",
7952+
"ALTER AGGREGATE alt_agg1(INT) RENAME TO alt_agg2",
7953+
),
7954+
(
7955+
"ALTER AGGREGATE alt_agg1(int) RENAME TO alt_agg3",
7956+
"ALTER AGGREGATE alt_agg1(INT) RENAME TO alt_agg3",
7957+
),
7958+
(
7959+
"ALTER AGGREGATE alt_agg2(int) OWNER TO regress_alter_generic_user2",
7960+
"ALTER AGGREGATE alt_agg2(INT) OWNER TO regress_alter_generic_user2",
7961+
),
7962+
(
7963+
"ALTER AGGREGATE alt_agg2(int) OWNER TO regress_alter_generic_user3",
7964+
"ALTER AGGREGATE alt_agg2(INT) OWNER TO regress_alter_generic_user3",
7965+
),
7966+
(
7967+
"ALTER AGGREGATE alt_agg2(int) SET SCHEMA alt_nsp2",
7968+
"ALTER AGGREGATE alt_agg2(INT) SET SCHEMA alt_nsp2",
7969+
),
7970+
(
7971+
"ALTER AGGREGATE alt_order(int ORDER BY text) RENAME TO alt_order2",
7972+
"ALTER AGGREGATE alt_order(INT ORDER BY TEXT) RENAME TO alt_order2",
7973+
),
7974+
(
7975+
"ALTER AGGREGATE alt_order_only(ORDER BY int) SET SCHEMA alt_nsp2",
7976+
"ALTER AGGREGATE alt_order_only(ORDER BY INT) SET SCHEMA alt_nsp2",
7977+
),
7978+
(
7979+
"ALTER AGGREGATE alt_star(*) OWNER TO regress_alter_generic_user2",
7980+
"ALTER AGGREGATE alt_star(*) OWNER TO regress_alter_generic_user2",
7981+
),
7982+
] {
7983+
let statement = pg_and_generic().one_statement_parses_to(sql, expected);
7984+
assert!(matches!(
7985+
statement,
7986+
Statement::AlterFunction(AlterFunction {
7987+
kind: AlterFunctionKind::Aggregate,
7988+
..
7989+
})
7990+
));
7991+
}
7992+
7993+
for (sql, expected) in [
7994+
(
7995+
"ALTER FUNCTION alt_func1(int) RENAME TO alt_func2",
7996+
"ALTER FUNCTION alt_func1(INT) RENAME TO alt_func2",
7997+
),
7998+
(
7999+
"ALTER FUNCTION alt_func1(int) RENAME TO alt_func3",
8000+
"ALTER FUNCTION alt_func1(INT) RENAME TO alt_func3",
8001+
),
8002+
(
8003+
"ALTER FUNCTION alt_func2(int) OWNER TO regress_alter_generic_user2",
8004+
"ALTER FUNCTION alt_func2(INT) OWNER TO regress_alter_generic_user2",
8005+
),
8006+
(
8007+
"ALTER FUNCTION alt_func2(int) OWNER TO regress_alter_generic_user3",
8008+
"ALTER FUNCTION alt_func2(INT) OWNER TO regress_alter_generic_user3",
8009+
),
8010+
(
8011+
"ALTER FUNCTION alt_func2(int) SET SCHEMA alt_nsp1",
8012+
"ALTER FUNCTION alt_func2(INT) SET SCHEMA alt_nsp1",
8013+
),
8014+
(
8015+
"ALTER FUNCTION alt_func2(int) SET SCHEMA alt_nsp2",
8016+
"ALTER FUNCTION alt_func2(INT) SET SCHEMA alt_nsp2",
8017+
),
8018+
(
8019+
"ALTER FUNCTION alt_func2(int) DEPENDS ON EXTENSION ext1",
8020+
"ALTER FUNCTION alt_func2(INT) DEPENDS ON EXTENSION ext1",
8021+
),
8022+
(
8023+
"ALTER FUNCTION alt_func2(int) NO DEPENDS ON EXTENSION ext1",
8024+
"ALTER FUNCTION alt_func2(INT) NO DEPENDS ON EXTENSION ext1",
8025+
),
8026+
(
8027+
"ALTER FUNCTION alt_func2 IMMUTABLE",
8028+
"ALTER FUNCTION alt_func2 IMMUTABLE",
8029+
),
8030+
(
8031+
"ALTER FUNCTION alt_func2(int) IMMUTABLE",
8032+
"ALTER FUNCTION alt_func2(INT) IMMUTABLE",
8033+
),
8034+
(
8035+
"ALTER FUNCTION alt_func2(int) STABLE",
8036+
"ALTER FUNCTION alt_func2(INT) STABLE",
8037+
),
8038+
(
8039+
"ALTER FUNCTION alt_func2(int) VOLATILE",
8040+
"ALTER FUNCTION alt_func2(INT) VOLATILE",
8041+
),
8042+
(
8043+
"ALTER FUNCTION alt_func2(int) CALLED ON NULL INPUT",
8044+
"ALTER FUNCTION alt_func2(INT) CALLED ON NULL INPUT",
8045+
),
8046+
(
8047+
"ALTER FUNCTION alt_func2(int) RETURNS NULL ON NULL INPUT",
8048+
"ALTER FUNCTION alt_func2(INT) RETURNS NULL ON NULL INPUT",
8049+
),
8050+
(
8051+
"ALTER FUNCTION alt_func2(int) STRICT",
8052+
"ALTER FUNCTION alt_func2(INT) STRICT",
8053+
),
8054+
(
8055+
"ALTER FUNCTION alt_func2(int) LEAKPROOF",
8056+
"ALTER FUNCTION alt_func2(INT) LEAKPROOF",
8057+
),
8058+
(
8059+
"ALTER FUNCTION alt_func2(int) NOT LEAKPROOF",
8060+
"ALTER FUNCTION alt_func2(INT) NOT LEAKPROOF",
8061+
),
8062+
(
8063+
"ALTER FUNCTION alt_func2(int) SECURITY DEFINER",
8064+
"ALTER FUNCTION alt_func2(INT) SECURITY DEFINER",
8065+
),
8066+
(
8067+
"ALTER FUNCTION alt_func2(int) EXTERNAL SECURITY INVOKER",
8068+
"ALTER FUNCTION alt_func2(INT) EXTERNAL SECURITY INVOKER",
8069+
),
8070+
(
8071+
"ALTER FUNCTION alt_func2(int) PARALLEL SAFE",
8072+
"ALTER FUNCTION alt_func2(INT) PARALLEL SAFE",
8073+
),
8074+
(
8075+
"ALTER FUNCTION alt_func2(int) PARALLEL RESTRICTED",
8076+
"ALTER FUNCTION alt_func2(INT) PARALLEL RESTRICTED",
8077+
),
8078+
(
8079+
"ALTER FUNCTION alt_func2(int) PARALLEL UNSAFE",
8080+
"ALTER FUNCTION alt_func2(INT) PARALLEL UNSAFE",
8081+
),
8082+
(
8083+
"ALTER FUNCTION alt_func2(int) COST 3.5",
8084+
"ALTER FUNCTION alt_func2(INT) COST 3.5",
8085+
),
8086+
(
8087+
"ALTER FUNCTION alt_func2(int) ROWS 42",
8088+
"ALTER FUNCTION alt_func2(INT) ROWS 42",
8089+
),
8090+
(
8091+
"ALTER FUNCTION alt_func2(int) SUPPORT pg_catalog.alt_support",
8092+
"ALTER FUNCTION alt_func2(INT) SUPPORT pg_catalog.alt_support",
8093+
),
8094+
(
8095+
"ALTER FUNCTION alt_func2(int) SET work_mem TO DEFAULT",
8096+
"ALTER FUNCTION alt_func2(INT) SET work_mem = DEFAULT",
8097+
),
8098+
(
8099+
"ALTER FUNCTION alt_func2(int) SET work_mem FROM CURRENT",
8100+
"ALTER FUNCTION alt_func2(INT) SET work_mem FROM CURRENT",
8101+
),
8102+
(
8103+
"ALTER FUNCTION alt_func2(int) SET search_path = pg_catalog, public",
8104+
"ALTER FUNCTION alt_func2(INT) SET search_path = pg_catalog, public",
8105+
),
8106+
(
8107+
"ALTER FUNCTION alt_func2(int) RESET work_mem",
8108+
"ALTER FUNCTION alt_func2(INT) RESET work_mem",
8109+
),
8110+
(
8111+
"ALTER FUNCTION alt_func2(int) RESET ALL",
8112+
"ALTER FUNCTION alt_func2(INT) RESET ALL",
8113+
),
8114+
(
8115+
"ALTER FUNCTION alt_func2(int) IMMUTABLE STRICT PARALLEL SAFE RESTRICT",
8116+
"ALTER FUNCTION alt_func2(INT) IMMUTABLE STRICT PARALLEL SAFE RESTRICT",
8117+
),
8118+
(
8119+
"ALTER FUNCTION alt_variadic(VARIADIC int[]) STABLE",
8120+
"ALTER FUNCTION alt_variadic(VARIADIC INT[]) STABLE",
8121+
),
8122+
] {
8123+
let statement = pg_and_generic().one_statement_parses_to(sql, expected);
8124+
assert!(matches!(
8125+
statement,
8126+
Statement::AlterFunction(AlterFunction {
8127+
kind: AlterFunctionKind::Function,
8128+
..
8129+
})
8130+
));
8131+
}
8132+
8133+
assert!(pg()
8134+
.parse_sql_statements("ALTER AGGREGATE alt_func1(INT) DEPENDS ON EXTENSION ext1")
8135+
.is_err());
8136+
assert!(pg()
8137+
.parse_sql_statements("ALTER AGGREGATE alt_func1(INT) NO DEPENDS ON EXTENSION ext1")
8138+
.is_err());
8139+
assert!(pg()
8140+
.parse_sql_statements("ALTER AGGREGATE alt_func1(OUT INT) OWNER TO joe")
8141+
.is_err());
8142+
assert!(pg()
8143+
.parse_sql_statements("ALTER AGGREGATE alt_func1(INOUT INT) OWNER TO joe")
8144+
.is_err());
8145+
assert!(pg()
8146+
.parse_sql_statements("ALTER AGGREGATE alt_func1(INT = 1) OWNER TO joe")
8147+
.is_err());
8148+
8149+
assert!(pg()
8150+
.parse_sql_statements("ALTER AGGREGATE alt_func1(INT) IMMUTABLE")
8151+
.is_err());
8152+
}
8153+
79358154
#[test]
79368155
fn parse_drop_operator_family() {
79378156
for if_exists in [true, false] {

0 commit comments

Comments
 (0)