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 ------ master Details ------- https://git.postgresql.org/pg/commitdiff/ba3115d8389657b199f38244c429ebcfe2f77ed1 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(-)
