Skip to content

Commit 3548035

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 c78237d commit 3548035

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
@@ -8060,6 +8060,225 @@ fn parse_alter_operator_class() {
80608060
.is_err());
80618061
}
80628062

8063+
#[test]
8064+
fn parse_alter_function_and_aggregate() {
8065+
for (sql, expected) in [
8066+
(
8067+
"ALTER AGGREGATE alt_func1(int) RENAME TO alt_func3",
8068+
"ALTER AGGREGATE alt_func1(INT) RENAME TO alt_func3",
8069+
),
8070+
(
8071+
"ALTER AGGREGATE alt_func1(int) OWNER TO regress_alter_generic_user3",
8072+
"ALTER AGGREGATE alt_func1(INT) OWNER TO regress_alter_generic_user3",
8073+
),
8074+
(
8075+
"ALTER AGGREGATE alt_func1(int) SET SCHEMA alt_nsp2",
8076+
"ALTER AGGREGATE alt_func1(INT) SET SCHEMA alt_nsp2",
8077+
),
8078+
(
8079+
"ALTER AGGREGATE alt_agg1(int) RENAME TO alt_agg2",
8080+
"ALTER AGGREGATE alt_agg1(INT) RENAME TO alt_agg2",
8081+
),
8082+
(
8083+
"ALTER AGGREGATE alt_agg1(int) RENAME TO alt_agg3",
8084+
"ALTER AGGREGATE alt_agg1(INT) RENAME TO alt_agg3",
8085+
),
8086+
(
8087+
"ALTER AGGREGATE alt_agg2(int) OWNER TO regress_alter_generic_user2",
8088+
"ALTER AGGREGATE alt_agg2(INT) OWNER TO regress_alter_generic_user2",
8089+
),
8090+
(
8091+
"ALTER AGGREGATE alt_agg2(int) OWNER TO regress_alter_generic_user3",
8092+
"ALTER AGGREGATE alt_agg2(INT) OWNER TO regress_alter_generic_user3",
8093+
),
8094+
(
8095+
"ALTER AGGREGATE alt_agg2(int) SET SCHEMA alt_nsp2",
8096+
"ALTER AGGREGATE alt_agg2(INT) SET SCHEMA alt_nsp2",
8097+
),
8098+
(
8099+
"ALTER AGGREGATE alt_order(int ORDER BY text) RENAME TO alt_order2",
8100+
"ALTER AGGREGATE alt_order(INT ORDER BY TEXT) RENAME TO alt_order2",
8101+
),
8102+
(
8103+
"ALTER AGGREGATE alt_order_only(ORDER BY int) SET SCHEMA alt_nsp2",
8104+
"ALTER AGGREGATE alt_order_only(ORDER BY INT) SET SCHEMA alt_nsp2",
8105+
),
8106+
(
8107+
"ALTER AGGREGATE alt_star(*) OWNER TO regress_alter_generic_user2",
8108+
"ALTER AGGREGATE alt_star(*) OWNER TO regress_alter_generic_user2",
8109+
),
8110+
] {
8111+
let statement = pg_and_generic().one_statement_parses_to(sql, expected);
8112+
assert!(matches!(
8113+
statement,
8114+
Statement::AlterFunction(AlterFunction {
8115+
kind: AlterFunctionKind::Aggregate,
8116+
..
8117+
})
8118+
));
8119+
}
8120+
8121+
for (sql, expected) in [
8122+
(
8123+
"ALTER FUNCTION alt_func1(int) RENAME TO alt_func2",
8124+
"ALTER FUNCTION alt_func1(INT) RENAME TO alt_func2",
8125+
),
8126+
(
8127+
"ALTER FUNCTION alt_func1(int) RENAME TO alt_func3",
8128+
"ALTER FUNCTION alt_func1(INT) RENAME TO alt_func3",
8129+
),
8130+
(
8131+
"ALTER FUNCTION alt_func2(int) OWNER TO regress_alter_generic_user2",
8132+
"ALTER FUNCTION alt_func2(INT) OWNER TO regress_alter_generic_user2",
8133+
),
8134+
(
8135+
"ALTER FUNCTION alt_func2(int) OWNER TO regress_alter_generic_user3",
8136+
"ALTER FUNCTION alt_func2(INT) OWNER TO regress_alter_generic_user3",
8137+
),
8138+
(
8139+
"ALTER FUNCTION alt_func2(int) SET SCHEMA alt_nsp1",
8140+
"ALTER FUNCTION alt_func2(INT) SET SCHEMA alt_nsp1",
8141+
),
8142+
(
8143+
"ALTER FUNCTION alt_func2(int) SET SCHEMA alt_nsp2",
8144+
"ALTER FUNCTION alt_func2(INT) SET SCHEMA alt_nsp2",
8145+
),
8146+
(
8147+
"ALTER FUNCTION alt_func2(int) DEPENDS ON EXTENSION ext1",
8148+
"ALTER FUNCTION alt_func2(INT) DEPENDS ON EXTENSION ext1",
8149+
),
8150+
(
8151+
"ALTER FUNCTION alt_func2(int) NO DEPENDS ON EXTENSION ext1",
8152+
"ALTER FUNCTION alt_func2(INT) NO DEPENDS ON EXTENSION ext1",
8153+
),
8154+
(
8155+
"ALTER FUNCTION alt_func2 IMMUTABLE",
8156+
"ALTER FUNCTION alt_func2 IMMUTABLE",
8157+
),
8158+
(
8159+
"ALTER FUNCTION alt_func2(int) IMMUTABLE",
8160+
"ALTER FUNCTION alt_func2(INT) IMMUTABLE",
8161+
),
8162+
(
8163+
"ALTER FUNCTION alt_func2(int) STABLE",
8164+
"ALTER FUNCTION alt_func2(INT) STABLE",
8165+
),
8166+
(
8167+
"ALTER FUNCTION alt_func2(int) VOLATILE",
8168+
"ALTER FUNCTION alt_func2(INT) VOLATILE",
8169+
),
8170+
(
8171+
"ALTER FUNCTION alt_func2(int) CALLED ON NULL INPUT",
8172+
"ALTER FUNCTION alt_func2(INT) CALLED ON NULL INPUT",
8173+
),
8174+
(
8175+
"ALTER FUNCTION alt_func2(int) RETURNS NULL ON NULL INPUT",
8176+
"ALTER FUNCTION alt_func2(INT) RETURNS NULL ON NULL INPUT",
8177+
),
8178+
(
8179+
"ALTER FUNCTION alt_func2(int) STRICT",
8180+
"ALTER FUNCTION alt_func2(INT) STRICT",
8181+
),
8182+
(
8183+
"ALTER FUNCTION alt_func2(int) LEAKPROOF",
8184+
"ALTER FUNCTION alt_func2(INT) LEAKPROOF",
8185+
),
8186+
(
8187+
"ALTER FUNCTION alt_func2(int) NOT LEAKPROOF",
8188+
"ALTER FUNCTION alt_func2(INT) NOT LEAKPROOF",
8189+
),
8190+
(
8191+
"ALTER FUNCTION alt_func2(int) SECURITY DEFINER",
8192+
"ALTER FUNCTION alt_func2(INT) SECURITY DEFINER",
8193+
),
8194+
(
8195+
"ALTER FUNCTION alt_func2(int) EXTERNAL SECURITY INVOKER",
8196+
"ALTER FUNCTION alt_func2(INT) EXTERNAL SECURITY INVOKER",
8197+
),
8198+
(
8199+
"ALTER FUNCTION alt_func2(int) PARALLEL SAFE",
8200+
"ALTER FUNCTION alt_func2(INT) PARALLEL SAFE",
8201+
),
8202+
(
8203+
"ALTER FUNCTION alt_func2(int) PARALLEL RESTRICTED",
8204+
"ALTER FUNCTION alt_func2(INT) PARALLEL RESTRICTED",
8205+
),
8206+
(
8207+
"ALTER FUNCTION alt_func2(int) PARALLEL UNSAFE",
8208+
"ALTER FUNCTION alt_func2(INT) PARALLEL UNSAFE",
8209+
),
8210+
(
8211+
"ALTER FUNCTION alt_func2(int) COST 3.5",
8212+
"ALTER FUNCTION alt_func2(INT) COST 3.5",
8213+
),
8214+
(
8215+
"ALTER FUNCTION alt_func2(int) ROWS 42",
8216+
"ALTER FUNCTION alt_func2(INT) ROWS 42",
8217+
),
8218+
(
8219+
"ALTER FUNCTION alt_func2(int) SUPPORT pg_catalog.alt_support",
8220+
"ALTER FUNCTION alt_func2(INT) SUPPORT pg_catalog.alt_support",
8221+
),
8222+
(
8223+
"ALTER FUNCTION alt_func2(int) SET work_mem TO DEFAULT",
8224+
"ALTER FUNCTION alt_func2(INT) SET work_mem = DEFAULT",
8225+
),
8226+
(
8227+
"ALTER FUNCTION alt_func2(int) SET work_mem FROM CURRENT",
8228+
"ALTER FUNCTION alt_func2(INT) SET work_mem FROM CURRENT",
8229+
),
8230+
(
8231+
"ALTER FUNCTION alt_func2(int) SET search_path = pg_catalog, public",
8232+
"ALTER FUNCTION alt_func2(INT) SET search_path = pg_catalog, public",
8233+
),
8234+
(
8235+
"ALTER FUNCTION alt_func2(int) RESET work_mem",
8236+
"ALTER FUNCTION alt_func2(INT) RESET work_mem",
8237+
),
8238+
(
8239+
"ALTER FUNCTION alt_func2(int) RESET ALL",
8240+
"ALTER FUNCTION alt_func2(INT) RESET ALL",
8241+
),
8242+
(
8243+
"ALTER FUNCTION alt_func2(int) IMMUTABLE STRICT PARALLEL SAFE RESTRICT",
8244+
"ALTER FUNCTION alt_func2(INT) IMMUTABLE STRICT PARALLEL SAFE RESTRICT",
8245+
),
8246+
(
8247+
"ALTER FUNCTION alt_variadic(VARIADIC int[]) STABLE",
8248+
"ALTER FUNCTION alt_variadic(VARIADIC INT[]) STABLE",
8249+
),
8250+
] {
8251+
let statement = pg_and_generic().one_statement_parses_to(sql, expected);
8252+
assert!(matches!(
8253+
statement,
8254+
Statement::AlterFunction(AlterFunction {
8255+
kind: AlterFunctionKind::Function,
8256+
..
8257+
})
8258+
));
8259+
}
8260+
8261+
assert!(pg()
8262+
.parse_sql_statements("ALTER AGGREGATE alt_func1(INT) DEPENDS ON EXTENSION ext1")
8263+
.is_err());
8264+
assert!(pg()
8265+
.parse_sql_statements("ALTER AGGREGATE alt_func1(INT) NO DEPENDS ON EXTENSION ext1")
8266+
.is_err());
8267+
assert!(pg()
8268+
.parse_sql_statements("ALTER AGGREGATE alt_func1(OUT INT) OWNER TO joe")
8269+
.is_err());
8270+
assert!(pg()
8271+
.parse_sql_statements("ALTER AGGREGATE alt_func1(INOUT INT) OWNER TO joe")
8272+
.is_err());
8273+
assert!(pg()
8274+
.parse_sql_statements("ALTER AGGREGATE alt_func1(INT = 1) OWNER TO joe")
8275+
.is_err());
8276+
8277+
assert!(pg()
8278+
.parse_sql_statements("ALTER AGGREGATE alt_func1(INT) IMMUTABLE")
8279+
.is_err());
8280+
}
8281+
80638282
#[test]
80648283
fn parse_drop_operator_family() {
80658284
for if_exists in [true, false] {

0 commit comments

Comments
 (0)