summaryrefslogtreecommitdiff
path: root/src/backend/commands/prepare.c
diff options
context:
space:
mode:
authorPeter Eisentraut2022-07-05 05:21:40 +0000
committerPeter Eisentraut2022-07-05 05:23:32 +0000
commit84ad713cf85aeffee5dd39f62d49a1b9e34632da (patch)
tree2be3003c63b57e871f63534a024668480831314f /src/backend/commands/prepare.c
parenteb64ceac7ec3422f2370b8824dce62ee8fe52dca (diff)
Add result_types column to pg_prepared_statements view
Containing the types of the columns returned by the prepared statement. Prompted by question from IRC user mlvzk. Author: Dagfinn Ilmari MannsÃ¥ker <[email protected]> Discussion: https://www.postgresql.org/message-id/flat/[email protected]
Diffstat (limited to 'src/backend/commands/prepare.c')
-rw-r--r--src/backend/commands/prepare.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/backend/commands/prepare.c b/src/backend/commands/prepare.c
index 633c9a40bbc..d1deb97fffb 100644
--- a/src/backend/commands/prepare.c
+++ b/src/backend/commands/prepare.c
@@ -683,8 +683,16 @@ pg_prepared_statement(PG_FUNCTION_ARGS)
hash_seq_init(&hash_seq, prepared_queries);
while ((prep_stmt = hash_seq_search(&hash_seq)) != NULL)
{
- Datum values[7];
- bool nulls[7];
+ TupleDesc result_desc;
+ Oid *result_types;
+ Datum values[8];
+ bool nulls[8];
+
+ result_desc = prep_stmt->plansource->resultDesc;
+ result_types = (Oid *) palloc(result_desc->natts * sizeof(Oid));
+
+ for (int i = 0; i < result_desc->natts; i++)
+ result_types[i] = result_desc->attrs[i].atttypid;
MemSet(nulls, 0, sizeof(nulls));
@@ -693,9 +701,10 @@ pg_prepared_statement(PG_FUNCTION_ARGS)
values[2] = TimestampTzGetDatum(prep_stmt->prepare_time);
values[3] = build_regtype_array(prep_stmt->plansource->param_types,
prep_stmt->plansource->num_params);
- values[4] = BoolGetDatum(prep_stmt->from_sql);
- values[5] = Int64GetDatumFast(prep_stmt->plansource->num_generic_plans);
- values[6] = Int64GetDatumFast(prep_stmt->plansource->num_custom_plans);
+ values[4] = build_regtype_array(result_types, result_desc->natts);
+ values[5] = BoolGetDatum(prep_stmt->from_sql);
+ values[6] = Int64GetDatumFast(prep_stmt->plansource->num_generic_plans);
+ values[7] = Int64GetDatumFast(prep_stmt->plansource->num_custom_plans);
tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc,
values, nulls);