diff options
author | Peter Eisentraut | 2022-07-05 05:21:40 +0000 |
---|---|---|
committer | Peter Eisentraut | 2022-07-05 05:23:32 +0000 |
commit | 84ad713cf85aeffee5dd39f62d49a1b9e34632da (patch) | |
tree | 2be3003c63b57e871f63534a024668480831314f /src/backend/commands/prepare.c | |
parent | eb64ceac7ec3422f2370b8824dce62ee8fe52dca (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.c | 19 |
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); |