Fix JSON_TABLE with sublinks in PASSING arguments transformJsonTable() handed the raw PASSING argument list both to the JsonFuncExpr built for the row pattern and, via transformJsonTableColumn(), to the JsonFuncExpr built for each column other than FOR ORDINALITY, so the same raw expressions were run through transformExpr() once for the row pattern and again for every such column. That doesn't work for sublinks: transformSubLink() replaces the SubLink's raw subselect with the analyzed Query, so the second pass failed with "unexpected non-SELECT command in SubLink". Other nodes that are transformed in place, such as NullTest, failed with "unrecognized node type". Any such PASSING argument therefore made JSON_TABLE fail unless all of its columns were FOR ORDINALITY.
Fix by giving each transformation its own copy of the raw PASSING arguments. Bug: #19786 Reported-by: Alperen Keles <[email protected]> Author: Ayush Tiwari <[email protected]> Co-authored-by: Amit Langote <[email protected]> Discussion: https://postgr.es/m/[email protected] Backpatch-through: 17 Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/35b349a530c61628f4b7a7968212e594297523c6 Modified Files -------------- src/backend/parser/parse_jsontable.c | 11 +++- src/test/regress/expected/sqljson_jsontable.out | 80 +++++++++++++++++++++++++ src/test/regress/sql/sqljson_jsontable.sql | 49 +++++++++++++++ 3 files changed, 138 insertions(+), 2 deletions(-)
