From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Fix recursive RECORD-returning plpython functions.
Date: Thu, 09 May 2024 17:16:42 +0000
Message-ID: <E1s57Np-000Bc7-37@gemulon.postgresql.org> (raw)
Fix recursive RECORD-returning plpython functions.
If we recursed to a new call of the same function, with a different
coldeflist (AS clause), it would fail because the inner call would
overwrite the outer call's idea of what to return. This is vaguely
like 1d2fe56e4 and c5bec5426, but it's not due to any API decisions:
it's just that we computed the actual output rowtype at the start of
the call, and saved it in the per-procedure data structure. We can
fix it at basically zero cost by doing the computation at the end
of each call instead of the start.
It's not clear that there's any real-world use-case for such a
function, but given that it doesn't cost anything to fix,
it'd be silly not to.
Per report from Andreas Karlsson. Back-patch to all supported
branches.
Discussion: https://postgr.es/m/1651a46d-3c15-4028-a8c1-d74937b54e19@proxel.se
Branch
------
REL_15_STABLE
Details
-------
https://git.postgresql.org/pg/commitdiff/6e29963edd55cfc038304322049d8fe697580f2c
Modified Files
--------------
src/pl/plpython/expected/plpython_composite.out | 14 +++++++++++
src/pl/plpython/plpy_exec.c | 33 +++++++++++++------------
src/pl/plpython/sql/plpython_composite.sql | 11 +++++++++
3 files changed, 42 insertions(+), 16 deletions(-)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-committers@postgresql.org
Cc: tgl@sss.pgh.pa.us, pgsql-committers@lists.postgresql.org
Subject: Re: pgsql: Fix recursive RECORD-returning plpython functions.
In-Reply-To: <E1s57Np-000Bc7-37@gemulon.postgresql.org>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox