aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/functioncmds.c
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2018-07-09 13:58:08 +0200
committerPeter Eisentraut <peter_e@gmx.net>2018-07-09 13:58:08 +0200
commitec67b89816012ad753ebbd3489c7e7d0fe80d4ca (patch)
tree54d61b292bc79b8bc8ea4616ef97c1569f184d12 /src/backend/commands/functioncmds.c
parentcccf81d259747f5198b55f51820b382ff5229a48 (diff)
downloadpostgresql-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.c24
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;
+}