postgres.git / summary / log / commit / refs
commit e34ec136201df07a05a83825ebff7fffb9043598
Author: Peter Eisentraut <peter_e@gmx.net>
Date: Fri Jul 06 20:27:42 2018 +0000
Allow CALL with polymorphic type arguments
In order to be able to resolve polymorphic types, we need to set fn_expr
before invoking the procedure.
src/backend/commands/functioncmds.c | 1 +
src/test/regress/expected/create_procedure.out | 7 +++++++
src/test/regress/sql/create_procedure.sql | 11 +++++++++++
3 files changed, 19 insertions(+)
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c
index 8864d9ae446..acc08b1990e 100644
--- a/src/backend/commands/functioncmds.c
+++ b/src/backend/commands/functioncmds.c
@@ -2264,6 +2264,7 @@ ExecuteCallStmt(CallStmt *stmt, ParamListInfo params, bool atomic, DestReceiver
/* Initialize function call structure */
InvokeFunctionExecuteHook(fexpr->funcid);
fmgr_info(fexpr->funcid, &flinfo);
+ fmgr_info_set_expr((Node *) fexpr, &flinfo);
InitFunctionCallInfoData(fcinfo, &flinfo, nargs, fexpr->inputcollid, (Node *) callcontext, NULL);
/*
diff --git a/src/test/regress/expected/create_procedure.out b/src/test/regress/expected/create_procedure.out
index 30495971bc8..0acea7bd8c7 100644
--- a/src/test/regress/expected/create_procedure.out
+++ b/src/test/regress/expected/create_procedure.out
@@ -116,6 +116,13 @@ SELECT * FROM cp_test;
100 | Hello
(8 rows)
+-- polymorphic types
+CREATE PROCEDURE ptest6(a int, b anyelement)
+LANGUAGE SQL
+AS $$
+SELECT NULL::int;
+$$;
+CALL ptest6(1, 2);
-- various error cases
CALL version(); -- error: not a procedure
ERROR: version() is not a procedure
diff --git a/src/test/regress/sql/create_procedure.sql b/src/test/regress/sql/create_procedure.sql
index 22cc497ebee..0a9af8c9063 100644
--- a/src/test/regress/sql/create_procedure.sql
+++ b/src/test/regress/sql/create_procedure.sql
@@ -84,6 +84,17 @@ CALL ptest5(b => 'Hello', a => 10);
SELECT * FROM cp_test;
+-- polymorphic types
+
+CREATE PROCEDURE ptest6(a int, b anyelement)
+LANGUAGE SQL
+AS $$
+SELECT NULL::int;
+$$;
+
+CALL ptest6(1, 2);
+
+
-- various error cases
CALL version(); -- error: not a procedure
[parent: 0ce5cf2ef24f]