Re: BUG #18463: Possible bug in stored procedures with polymorphic OUT parameters - Mailing list pgsql-bugs

From Dmitry Dolgov
Subject Re: BUG #18463: Possible bug in stored procedures with polymorphic OUT parameters
Date
Msg-id 20240515143506.pln5mzipy7iwa45i@ddolgov.remote.csb
Whole thread Raw
In response to Re: BUG #18463: Possible bug in stored procedures with polymorphic OUT parameters  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: BUG #18463: Possible bug in stored procedures with polymorphic OUT parameters
List pgsql-bugs
> On Tue, May 14, 2024 at 08:00:31PM -0400, Tom Lane wrote:
> I wrote:
> > Some experimentation showed that we need to return the correct
> > output column names in this tupdesc, so continuing to use
> > build_function_result_tupdesc_t seems like the easiest path for that.
> > However, stmt->outargs does hold nodes of the correct resolved data
> > types, so overwriting the atttypid's from that produces a nicely
> > small patch, as attached.
>
> Bleah ... that works fine back to v14, but in 12 and 13 it falls
> down because there's no outargs list in CallStmt.  We can look at
> stmt->funcexpr->args instead, but (a) we have to rediscover which
> elements of that are output args, and (b) that list hasn't been
> run through expand_function_arguments, so we have to do that
> an extra time.
>
> (b) is pretty annoying, since the work is 100% duplicative of
> what's about to happen in ExecuteCallStmt.  I thought briefly
> about moving the expand_function_arguments call from execution to
> transformCallStmt, the way it's done in v14 and later.  I'm afraid
> to do that though, because it seems just barely possible that there's
> third-party code that knows that that list hasn't been expanded in
> these old branches.  I fear we just have to eat the additional
> cycles.  They're not that much compared to what will happen to run
> a user-defined procedure, but still, bleah.
>
> So I end with the attached modification for 12/13.

TIL, thanks. The patches look good to me, I've verified on both master
and 13 that it fixes the problem.

I'm now curious why it is different for functions, when creating one
with an INOUT ANYELEMENT argument and record return type will error out.
Disabling the corresponding ereport check in CreateFunction seems to
produce a function that works in the similar way as the procedure in
this thread. Are those type of functions incorrect in some way?



pgsql-bugs by date:

Previous
From: "Dirschel, Steve"
Date:
Subject: Need the ability to call alter table detach partition concurrently inside a procedure
Next
From: Tom Lane
Date:
Subject: Re: BUG #18464: Replacing a SQL function silently drops the generated columns that use this function