diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2018-07-06 22:27:42 +0200 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2018-07-06 22:40:16 +0200 |
commit | e34ec136201df07a05a83825ebff7fffb9043598 (patch) | |
tree | a97a99d9a503b7b66b363c51b6d9f83ed591ad6b /src | |
parent | 0ce5cf2ef24f638ff05569d027135fa1c7683a71 (diff) | |
download | postgresql-e34ec136201df07a05a83825ebff7fffb9043598.tar.gz postgresql-e34ec136201df07a05a83825ebff7fffb9043598.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/commands/functioncmds.c | 1 | ||||
-rw-r--r-- | src/test/regress/expected/create_procedure.out | 7 | ||||
-rw-r--r-- | src/test/regress/sql/create_procedure.sql | 11 |
3 files changed, 19 insertions, 0 deletions
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 |