From 891c34fd8a1d54e06578ec22b186eafa52ee0f97 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 12 Aug 2022 20:18:16 +0200 Subject: [PATCH v1 7/7] Enable utility statements in unquoted SQL function body This should now work, since we have full serialization support for utility statements. XXX actually not yet --- src/backend/commands/functioncmds.c | 10 ---------- src/test/regress/expected/create_procedure.out | 11 ++++++++--- src/test/regress/sql/create_procedure.sql | 8 ++++++-- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index e7e37146f6..8198936741 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -939,11 +939,6 @@ interpret_AS_clause(Oid languageOid, const char *languageName, pstate->p_sourcetext = queryString; sql_fn_parser_setup(pstate, pinfo); q = transformStmt(pstate, stmt); - if (q->commandType == CMD_UTILITY) - ereport(ERROR, - errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("%s is not yet supported in unquoted SQL function body", - GetCommandTagName(CreateCommandTag(q->utilityStmt)))); transformed_stmts = lappend(transformed_stmts, q); free_parsestate(pstate); } @@ -958,11 +953,6 @@ interpret_AS_clause(Oid languageOid, const char *languageName, pstate->p_sourcetext = queryString; sql_fn_parser_setup(pstate, pinfo); q = transformStmt(pstate, sql_body_in); - if (q->commandType == CMD_UTILITY) - ereport(ERROR, - errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("%s is not yet supported in unquoted SQL function body", - GetCommandTagName(CreateCommandTag(q->utilityStmt)))); free_parsestate(pstate); *sql_body_out = (Node *) q; diff --git a/src/test/regress/expected/create_procedure.out b/src/test/regress/expected/create_procedure.out index 46c827f979..95bf3e5256 100644 --- a/src/test/regress/expected/create_procedure.out +++ b/src/test/regress/expected/create_procedure.out @@ -100,13 +100,18 @@ SELECT * FROM cp_test ORDER BY b COLLATE "C"; 1 | xyzzy (4 rows) --- utitlity functions currently not supported here -CREATE PROCEDURE ptestx() +CREATE PROCEDURE ptest_util() LANGUAGE SQL BEGIN ATOMIC CREATE TABLE x (a int); END; -ERROR: CREATE TABLE is not yet supported in unquoted SQL function body +CALL ptest_util(); +SELECT * FROM x; + a +--- +(0 rows) + +DROP TABLE x; CREATE PROCEDURE ptest2() LANGUAGE SQL AS $$ diff --git a/src/test/regress/sql/create_procedure.sql b/src/test/regress/sql/create_procedure.sql index 75cc0fcf2a..9d33e53a1d 100644 --- a/src/test/regress/sql/create_procedure.sql +++ b/src/test/regress/sql/create_procedure.sql @@ -42,13 +42,17 @@ CREATE PROCEDURE ptest1s(x text) SELECT * FROM cp_test ORDER BY b COLLATE "C"; --- utitlity functions currently not supported here -CREATE PROCEDURE ptestx() + +CREATE PROCEDURE ptest_util() LANGUAGE SQL BEGIN ATOMIC CREATE TABLE x (a int); END; +CALL ptest_util(); +SELECT * FROM x; +DROP TABLE x; + CREATE PROCEDURE ptest2() LANGUAGE SQL -- 2.37.1