From ec67b89816012ad753ebbd3489c7e7d0fe80d4ca Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 9 Jul 2018 13:58:08 +0200 Subject: Add UtilityReturnsTuples() support for CALL This ensures that prepared statements for CALL can return tuples. --- src/backend/commands/functioncmds.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/backend/commands/functioncmds.c') 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; +} -- cgit v1.2.3