Fix multi-row INSERT with a sublink in a target column subscript For INSERT ... VALUES with more than one row, transformInsertStmt() calls transformInsertRow() once for each VALUES row and once more for the final targetlist, and each call transformed the same raw indirection from the target column list. That doesn't work for sublinks, because transformSubLink() replaces the raw subselect with its 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".
Fix by giving each transformation its own copy of the indirection. Claude found this issue when reviewing another bug. Discussion: https://postgr.es/m/CA+HiwqHCZLZV_20nz3fQX+1=vyFLDMbG0_3wY=qujnkzwts...@mail.gmail.com Reviewed-by: Chao Li <[email protected]> Reviewed-by: Shihao Zhong <[email protected]> Backpatch-through: 14 Branch ------ REL_17_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/f116737684c28526e90f262098027fb7ddb518cd Modified Files -------------- src/backend/parser/analyze.c | 8 +++++++- src/test/regress/expected/insert.out | 10 ++++++++++ src/test/regress/sql/insert.sql | 4 ++++ 3 files changed, 21 insertions(+), 1 deletion(-)
