mirror of
https://github.com/postgres/postgres.git
synced 2025-04-22 23:02:54 +03:00
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.
This commit is contained in:
parent
0ce5cf2ef2
commit
e34ec13620
@ -2264,6 +2264,7 @@ ExecuteCallStmt(CallStmt *stmt, ParamListInfo params, bool atomic, DestReceiver
|
|||||||
/* Initialize function call structure */
|
/* Initialize function call structure */
|
||||||
InvokeFunctionExecuteHook(fexpr->funcid);
|
InvokeFunctionExecuteHook(fexpr->funcid);
|
||||||
fmgr_info(fexpr->funcid, &flinfo);
|
fmgr_info(fexpr->funcid, &flinfo);
|
||||||
|
fmgr_info_set_expr((Node *) fexpr, &flinfo);
|
||||||
InitFunctionCallInfoData(fcinfo, &flinfo, nargs, fexpr->inputcollid, (Node *) callcontext, NULL);
|
InitFunctionCallInfoData(fcinfo, &flinfo, nargs, fexpr->inputcollid, (Node *) callcontext, NULL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -116,6 +116,13 @@ SELECT * FROM cp_test;
|
|||||||
100 | Hello
|
100 | Hello
|
||||||
(8 rows)
|
(8 rows)
|
||||||
|
|
||||||
|
-- polymorphic types
|
||||||
|
CREATE PROCEDURE ptest6(a int, b anyelement)
|
||||||
|
LANGUAGE SQL
|
||||||
|
AS $$
|
||||||
|
SELECT NULL::int;
|
||||||
|
$$;
|
||||||
|
CALL ptest6(1, 2);
|
||||||
-- various error cases
|
-- various error cases
|
||||||
CALL version(); -- error: not a procedure
|
CALL version(); -- error: not a procedure
|
||||||
ERROR: version() is not a procedure
|
ERROR: version() is not a procedure
|
||||||
|
@ -84,6 +84,17 @@ CALL ptest5(b => 'Hello', a => 10);
|
|||||||
SELECT * FROM cp_test;
|
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
|
-- various error cases
|
||||||
|
|
||||||
CALL version(); -- error: not a procedure
|
CALL version(); -- error: not a procedure
|
||||||
|
Loading…
x
Reference in New Issue
Block a user