diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2018-07-09 13:58:08 +0200 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2018-07-09 13:58:08 +0200 |
commit | ec67b89816012ad753ebbd3489c7e7d0fe80d4ca (patch) | |
tree | 54d61b292bc79b8bc8ea4616ef97c1569f184d12 /src/backend/commands/functioncmds.c | |
parent | cccf81d259747f5198b55f51820b382ff5229a48 (diff) | |
download | postgresql-ec67b89816012ad753ebbd3489c7e7d0fe80d4ca.tar.gz postgresql-ec67b89816012ad753ebbd3489c7e7d0fe80d4ca.zip |
Add UtilityReturnsTuples() support for CALL
This ensures that prepared statements for CALL can return tuples.
Diffstat (limited to 'src/backend/commands/functioncmds.c')
-rw-r--r-- | src/backend/commands/functioncmds.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index acc08b1990e..84daa19e064 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -51,6 +51,7 @@ #include "commands/proclang.h" #include "executor/execdesc.h" #include "executor/executor.h" +#include "funcapi.h" #include "miscadmin.h" #include "optimizer/clauses.h" #include "optimizer/var.h" @@ -2340,3 +2341,26 @@ ExecuteCallStmt(CallStmt *stmt, ParamListInfo params, bool atomic, DestReceiver FreeExecutorState(estate); } + +/* + * Construct the tuple descriptor for a CALL statement return + */ +TupleDesc +CallStmtResultDesc(CallStmt *stmt) +{ + FuncExpr *fexpr; + HeapTuple tuple; + TupleDesc tupdesc; + + fexpr = stmt->funcexpr; + + tuple = SearchSysCache1(PROCOID, ObjectIdGetDatum(fexpr->funcid)); + if (!HeapTupleIsValid(tuple)) + elog(ERROR, "cache lookup failed for procedure %u", fexpr->funcid); + + tupdesc = build_function_result_tupdesc_t(tuple); + + ReleaseSysCache(tuple); + + return tupdesc; +} |