Re: remaining sql/json patches

From: Amit Langote <amitlangote09(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: Andres Freund <andres(at)anarazel(dot)de>, Erik Rijkers <er(at)xs4all(dot)nl>, jian he <jian(dot)universality(at)gmail(dot)com>, Andrew Dunstan <andrew(at)dunslane(dot)net>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: remaining sql/json patches
Date: 2024-01-19 03:09:49
Message-ID: CA+HiwqEZP-ybbvTZ_2gKJD2p60hvDkL9-UsoKrzirZkwdV60Ng@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Fri, Jan 19, 2024 at 2:11 AM Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> wrote:
> On 2024-Jan-18, Alvaro Herrera wrote:
>
> > commands/explain.c (Hmm, I think this is a preexisting bug actually)
> >
> > 3893 18 : case T_TableFuncScan:
> > 3894 18 : Assert(rte->rtekind == RTE_TABLEFUNC);
> > 3895 18 : if (rte->tablefunc)
> > 3896 0 : if (rte->tablefunc->functype == TFT_XMLTABLE)
> > 3897 0 : objectname = "xmltable";
> > 3898 : else /* Must be TFT_JSON_TABLE */
> > 3899 0 : objectname = "json_table";
> > 3900 : else
> > 3901 18 : objectname = NULL;
> > 3902 18 : objecttag = "Table Function Name";
> > 3903 18 : break;
>
> Indeed -- the problem seems to be that add_rte_to_flat_rtable is
> creating a new RTE and zaps the ->tablefunc pointer for it. So when
> EXPLAIN goes to examine the struct, there's a NULL pointer there and
> nothing is printed.

Ah yes.

> One simple fix is to change add_rte_to_flat_rtable so that it doesn't
> zero out the tablefunc pointer, but this is straight against what that
> function is trying to do, namely to remove substructure.

Yes.

> Which means
> that we need to preserve the name somewhere else. I added a new member
> to RangeTblEntry for this, which perhaps is a little ugly. So here's
> the patch for that.
>
> (I also added an alias to one XMLTABLE invocation
> under EXPLAIN, to show what it looks like when an alias is specified.
> Otherwise they're always shown as "XMLTABLE" "xmltable" which is a bit
> dumb).

Thanks for the patch. Seems alright to me.

> Another possible way out is to decide that we don't want the
> "objectname" to be reported here. I admit it's perhaps redundant. In
> this case we'd just remove lines 3896-3899 shown above and let it be
> NULL.

Showing the function's name spelled out in the query (XMLTABLE /
JSON_TABLE) seems fine to me, even though maybe a bit redundant, yes.

--
Thanks, Amit Langote
EDB: http://www.enterprisedb.com

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message David G. Johnston 2024-01-19 03:24:23 Re: UUID v7
Previous Message Andy Fan 2024-01-19 03:01:03 Re: Strange Bitmapset manipulation in DiscreteKnapsack()