Re: remaining sql/json patches
От | Alvaro Herrera |
---|---|
Тема | Re: remaining sql/json patches |
Дата | |
Msg-id | 202401181711.qxjxpnl3ohnw@alvherre.pgsql обсуждение исходный текст |
Ответ на | Re: remaining sql/json patches (Alvaro Herrera <alvherre@alvh.no-ip.org>) |
Ответы |
Re: remaining sql/json patches
Re: remaining sql/json patches |
Список | pgsql-hackers |
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. 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. 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). 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. Thoughts? -- Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
Вложения
В списке pgsql-hackers по дате отправления: