=== Applying patches on top of PostgreSQL commit ID 901ed9b352b41f034e17bc540725082a488fce31 === /etc/rc.d/jail: WARNING: Per-jail configuration via jail_* variables is obsolete. Please consider migrating to /etc/jail.conf. Sun May 10 00:09:22 UTC 2026 On branch cf/5854 nothing to commit, working tree clean === using 'git am' to apply patch ./v5-0001-Allow-EXCLUDED-in-RETURNING-list-of-INSERT-ON-CON.patch === Applying: Allow EXCLUDED in RETURNING list of INSERT ON CONFLICT DO SELECT/UPDATE. Using index info to reconstruct a base tree... M doc/src/sgml/dml.sgml M src/backend/executor/execExpr.c M src/backend/executor/execExprInterp.c M src/backend/executor/execPartition.c M src/backend/executor/nodeModifyTable.c M src/backend/optimizer/path/allpaths.c M src/backend/optimizer/plan/setrefs.c M src/backend/optimizer/prep/prepjointree.c M src/backend/optimizer/prep/preptlist.c M src/backend/optimizer/util/clauses.c M src/backend/optimizer/util/var.c M src/backend/parser/analyze.c M src/backend/parser/parse_expr.c M src/backend/parser/parse_relation.c M src/backend/rewrite/rewriteHandler.c M src/backend/rewrite/rewriteManip.c M src/include/executor/execExpr.h M src/include/nodes/execnodes.h M src/include/nodes/primnodes.h M src/include/parser/parse_node.h M src/include/rewrite/rewriteManip.h M src/test/regress/expected/generated_stored.out M src/test/regress/expected/generated_virtual.out M src/test/regress/expected/inherit.out M src/test/regress/expected/returning.out M src/test/regress/expected/rules.out M src/test/regress/expected/triggers.out M src/test/regress/expected/updatable_views.out M src/test/regress/sql/generated_stored.sql M src/test/regress/sql/generated_virtual.sql M src/test/regress/sql/inherit.sql M src/test/regress/sql/returning.sql M src/test/regress/sql/triggers.sql M src/test/regress/sql/updatable_views.sql M src/tools/pgindent/typedefs.list Falling back to patching base and 3-way merge... Auto-merging src/tools/pgindent/typedefs.list Auto-merging src/test/regress/sql/updatable_views.sql Auto-merging src/test/regress/sql/triggers.sql Auto-merging src/test/regress/sql/returning.sql Auto-merging src/test/regress/sql/inherit.sql Auto-merging src/test/regress/sql/generated_virtual.sql Auto-merging src/test/regress/sql/generated_stored.sql Auto-merging src/test/regress/expected/updatable_views.out Auto-merging src/test/regress/expected/triggers.out Auto-merging src/test/regress/expected/rules.out Auto-merging src/test/regress/expected/returning.out Auto-merging src/test/regress/expected/inherit.out Auto-merging src/test/regress/expected/generated_virtual.out Auto-merging src/test/regress/expected/generated_stored.out Auto-merging src/include/rewrite/rewriteManip.h Auto-merging src/include/parser/parse_node.h Auto-merging src/include/nodes/primnodes.h Auto-merging src/include/nodes/execnodes.h Auto-merging src/include/executor/execExpr.h Auto-merging src/backend/rewrite/rewriteManip.c Auto-merging src/backend/rewrite/rewriteHandler.c CONFLICT (content): Merge conflict in src/backend/rewrite/rewriteHandler.c Auto-merging src/backend/parser/parse_relation.c Auto-merging src/backend/parser/parse_expr.c Auto-merging src/backend/parser/analyze.c Auto-merging src/backend/optimizer/util/var.c Auto-merging src/backend/optimizer/util/clauses.c Auto-merging src/backend/optimizer/prep/preptlist.c Auto-merging src/backend/optimizer/prep/prepjointree.c Auto-merging src/backend/optimizer/plan/setrefs.c Auto-merging src/backend/optimizer/path/allpaths.c Auto-merging src/backend/executor/nodeModifyTable.c Auto-merging src/backend/executor/execPartition.c Auto-merging src/backend/executor/execExprInterp.c Auto-merging src/backend/executor/execExpr.c Auto-merging doc/src/sgml/dml.sgml error: Failed to merge in the changes. hint: Use 'git am --show-current-patch=diff' to see the failed patch Patch failed at 0001 Allow EXCLUDED in RETURNING list of INSERT ON CONFLICT DO SELECT/UPDATE. When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". === using patch(1) to apply patch ./v5-0001-Allow-EXCLUDED-in-RETURNING-list-of-INSERT-ON-CON.patch === patching file doc/src/sgml/dml.sgml Hunk #1 succeeded at 565 (offset 173 lines). patching file doc/src/sgml/ref/insert.sgml patching file src/backend/executor/execExpr.c Hunk #1 succeeded at 476 (offset 21 lines). Hunk #2 succeeded at 491 (offset 21 lines). Hunk #3 succeeded at 1010 (offset 33 lines). Hunk #4 succeeded at 1049 (offset 33 lines). Hunk #5 succeeded at 2677 (offset 33 lines). Hunk #6 succeeded at 2701 (offset 33 lines). Hunk #7 succeeded at 3068 (offset 33 lines). Hunk #8 succeeded at 3237 (offset 33 lines). patching file src/backend/executor/execExprInterp.c Hunk #1 succeeded at 5413 (offset 70 lines). Hunk #2 succeeded at 5472 (offset 70 lines). patching file src/backend/executor/execPartition.c Hunk #1 succeeded at 709 (offset 1 line). patching file src/backend/executor/nodeModifyTable.c Hunk #1 succeeded at 301 (offset 11 lines). Hunk #2 succeeded at 318 (offset 11 lines). Hunk #3 succeeded at 357 (offset 11 lines). Hunk #4 succeeded at 380 (offset 11 lines). Hunk #5 succeeded at 1385 (offset 9 lines). Hunk #6 succeeded at 2195 (offset 258 lines). Hunk #7 succeeded at 2768 (offset 271 lines). Hunk #8 succeeded at 2779 (offset 271 lines). Hunk #9 succeeded at 3012 (offset 271 lines). Hunk #10 succeeded at 3253 (offset 271 lines). Hunk #11 succeeded at 3386 (offset 271 lines). Hunk #12 succeeded at 4041 (offset 276 lines). Hunk #13 succeeded at 4051 (offset 276 lines). Hunk #14 succeeded at 4816 (offset 276 lines). Hunk #15 succeeded at 5020 (offset 276 lines). patching file src/backend/optimizer/path/allpaths.c Hunk #1 succeeded at 4563 (offset 15 lines). patching file src/backend/optimizer/plan/setrefs.c Hunk #5 succeeded at 2885 (offset 6 lines). Hunk #6 succeeded at 2915 (offset 6 lines). Hunk #7 succeeded at 3154 (offset 6 lines). Hunk #8 succeeded at 3222 (offset 6 lines). Hunk #9 succeeded at 3461 (offset 6 lines). Hunk #10 succeeded at 3477 (offset 6 lines). Hunk #11 succeeded at 3493 (offset 6 lines). Hunk #12 succeeded at 3502 (offset 6 lines). Hunk #13 succeeded at 3515 (offset 6 lines). patching file src/backend/optimizer/prep/prepjointree.c Hunk #2 succeeded at 541 (offset 1 line). Hunk #3 succeeded at 1587 (offset 75 lines). Hunk #4 succeeded at 2142 (offset 79 lines). Hunk #5 succeeded at 2302 (offset 79 lines). Hunk #6 succeeded at 2840 (offset 83 lines). patching file src/backend/optimizer/prep/preptlist.c Hunk #1 succeeded at 293 (offset 2 lines). Hunk #2 succeeded at 313 (offset 2 lines). patching file src/backend/optimizer/util/clauses.c Hunk #1 succeeded at 3767 (offset 248 lines). patching file src/backend/optimizer/util/var.c patching file src/backend/parser/analyze.c Hunk #1 succeeded at 1279 (offset 24 lines). patching file src/backend/parser/parse_expr.c Hunk #1 succeeded at 2685 (offset 21 lines). patching file src/backend/parser/parse_relation.c patching file src/backend/rewrite/rewriteHandler.c Hunk #1 FAILED at 97. Hunk #2 succeeded at 664 with fuzz 2 (offset 18 lines). Hunk #3 FAILED at 2362. Hunk #4 succeeded at 3798 (offset 77 lines). Hunk #5 succeeded at 3816 (offset 77 lines). Hunk #6 FAILED at 4466. Hunk #7 FAILED at 4500. Hunk #8 FAILED at 4530. 5 out of 8 hunks FAILED -- saving rejects to file src/backend/rewrite/rewriteHandler.c.rej patching file src/backend/rewrite/rewriteManip.c Hunk #1 succeeded at 930 (offset 12 lines). Hunk #2 succeeded at 940 (offset 12 lines). Hunk #3 succeeded at 954 (offset 12 lines). Hunk #4 succeeded at 976 (offset 12 lines). Hunk #5 succeeded at 1734 (offset -7 lines). Hunk #6 succeeded at 1770 (offset -7 lines). Hunk #7 succeeded at 1785 (offset -7 lines). Hunk #8 succeeded at 1800 with fuzz 1 (offset -7 lines). Hunk #9 succeeded at 1849 (offset -7 lines). Hunk #10 succeeded at 1861 (offset -7 lines). Hunk #11 succeeded at 1933 (offset -4 lines). Hunk #12 succeeded at 1970 (offset -4 lines). Hunk #13 succeeded at 1979 (offset -4 lines). patching file src/include/executor/execExpr.h patching file src/include/nodes/execnodes.h Hunk #1 succeeded at 94 (offset 12 lines). patching file src/include/nodes/primnodes.h Hunk #3 succeeded at 2172 (offset 14 lines). Hunk #4 succeeded at 2188 (offset 14 lines). patching file src/include/parser/parse_node.h Hunk #1 succeeded at 300 (offset 25 lines). Hunk #2 succeeded at 322 (offset 25 lines). Hunk #3 succeeded at 353 (offset 25 lines). patching file src/include/rewrite/rewriteManip.h Hunk #1 succeeded at 107 with fuzz 1. patching file src/test/regress/expected/arrays.out patching file src/test/regress/expected/generated_stored.out patching file src/test/regress/expected/generated_virtual.out patching file src/test/regress/expected/inherit.out Hunk #1 succeeded at 2219 (offset 88 lines). patching file src/test/regress/expected/insert_conflict.out patching file src/test/regress/expected/returning.out patching file src/test/regress/expected/rules.out Hunk #1 succeeded at 3705 (offset 98 lines). patching file src/test/regress/expected/triggers.out patching file src/test/regress/expected/updatable_views.out Hunk #3 succeeded at 3776 (offset 32 lines). Hunk #4 succeeded at 3791 (offset 32 lines). patching file src/test/regress/sql/arrays.sql patching file src/test/regress/sql/generated_stored.sql patching file src/test/regress/sql/generated_virtual.sql patching file src/test/regress/sql/inherit.sql Hunk #1 succeeded at 849 (offset 43 lines). patching file src/test/regress/sql/insert_conflict.sql patching file src/test/regress/sql/returning.sql patching file src/test/regress/sql/rules.sql patching file src/test/regress/sql/triggers.sql patching file src/test/regress/sql/updatable_views.sql Hunk #2 succeeded at 1916 (offset 14 lines). patching file src/tools/pgindent/typedefs.list Hunk #1 succeeded at 2688 (offset 69 lines). Unstaged changes after reset: M doc/src/sgml/dml.sgml M doc/src/sgml/ref/insert.sgml M src/backend/executor/execExpr.c M src/backend/executor/execExprInterp.c M src/backend/executor/execPartition.c M src/backend/executor/nodeModifyTable.c M src/backend/optimizer/path/allpaths.c M src/backend/optimizer/plan/setrefs.c M src/backend/optimizer/prep/prepjointree.c M src/backend/optimizer/prep/preptlist.c M src/backend/optimizer/util/clauses.c M src/backend/optimizer/util/var.c M src/backend/parser/analyze.c M src/backend/parser/parse_expr.c M src/backend/parser/parse_relation.c M src/backend/rewrite/rewriteHandler.c M src/backend/rewrite/rewriteManip.c M src/include/executor/execExpr.h M src/include/nodes/execnodes.h M src/include/nodes/primnodes.h M src/include/parser/parse_node.h M src/include/rewrite/rewriteManip.h M src/test/regress/expected/arrays.out M src/test/regress/expected/generated_stored.out M src/test/regress/expected/generated_virtual.out M src/test/regress/expected/inherit.out M src/test/regress/expected/insert_conflict.out M src/test/regress/expected/returning.out M src/test/regress/expected/rules.out M src/test/regress/expected/triggers.out M src/test/regress/expected/updatable_views.out M src/test/regress/sql/arrays.sql M src/test/regress/sql/generated_stored.sql M src/test/regress/sql/generated_virtual.sql M src/test/regress/sql/inherit.sql M src/test/regress/sql/insert_conflict.sql M src/test/regress/sql/returning.sql M src/test/regress/sql/rules.sql M src/test/regress/sql/triggers.sql M src/test/regress/sql/updatable_views.sql M src/tools/pgindent/typedefs.list Removing src/backend/rewrite/rewriteHandler.c.rej === using 'git apply' to apply patch ./v5-0001-Allow-EXCLUDED-in-RETURNING-list-of-INSERT-ON-CON.patch === Applied patch to 'doc/src/sgml/dml.sgml' cleanly. Applied patch to 'doc/src/sgml/ref/insert.sgml' cleanly. Applied patch to 'src/backend/executor/execExpr.c' cleanly. Applied patch to 'src/backend/executor/execExprInterp.c' cleanly. Applied patch to 'src/backend/executor/execPartition.c' cleanly. Applied patch to 'src/backend/executor/nodeModifyTable.c' cleanly. Applied patch to 'src/backend/optimizer/path/allpaths.c' cleanly. Applied patch to 'src/backend/optimizer/plan/setrefs.c' cleanly. Applied patch to 'src/backend/optimizer/prep/prepjointree.c' cleanly. Applied patch to 'src/backend/optimizer/prep/preptlist.c' cleanly. Applied patch to 'src/backend/optimizer/util/clauses.c' cleanly. Applied patch to 'src/backend/optimizer/util/var.c' cleanly. Applied patch to 'src/backend/parser/analyze.c' cleanly. Applied patch to 'src/backend/parser/parse_expr.c' cleanly. Applied patch to 'src/backend/parser/parse_relation.c' cleanly. Applied patch to 'src/backend/rewrite/rewriteHandler.c' with conflicts. Applied patch to 'src/backend/rewrite/rewriteManip.c' cleanly. Applied patch to 'src/include/executor/execExpr.h' cleanly. Applied patch to 'src/include/nodes/execnodes.h' cleanly. Applied patch to 'src/include/nodes/primnodes.h' cleanly. Applied patch to 'src/include/parser/parse_node.h' cleanly. Applied patch to 'src/include/rewrite/rewriteManip.h' cleanly. Applied patch to 'src/test/regress/expected/arrays.out' cleanly. Applied patch to 'src/test/regress/expected/generated_stored.out' cleanly. Applied patch to 'src/test/regress/expected/generated_virtual.out' cleanly. Applied patch to 'src/test/regress/expected/inherit.out' cleanly. Applied patch to 'src/test/regress/expected/insert_conflict.out' cleanly. Applied patch to 'src/test/regress/expected/returning.out' cleanly. Applied patch to 'src/test/regress/expected/rules.out' cleanly. Applied patch to 'src/test/regress/expected/triggers.out' cleanly. Applied patch to 'src/test/regress/expected/updatable_views.out' cleanly. Applied patch to 'src/test/regress/sql/arrays.sql' cleanly. Applied patch to 'src/test/regress/sql/generated_stored.sql' cleanly. Applied patch to 'src/test/regress/sql/generated_virtual.sql' cleanly. Applied patch to 'src/test/regress/sql/inherit.sql' cleanly. Applied patch to 'src/test/regress/sql/insert_conflict.sql' cleanly. Applied patch to 'src/test/regress/sql/returning.sql' cleanly. Applied patch to 'src/test/regress/sql/rules.sql' cleanly. Applied patch to 'src/test/regress/sql/triggers.sql' cleanly. Applied patch to 'src/test/regress/sql/updatable_views.sql' cleanly. Applied patch to 'src/tools/pgindent/typedefs.list' cleanly. U src/backend/rewrite/rewriteHandler.c diff --cc src/backend/rewrite/rewriteHandler.c index 77b2c9bc622,e4bf25a4beb..00000000000 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@@ -97,7 -96,8 +97,12 @@@ static List *matchLocks(CmdType event, int varno, Query *parsetree, bool *hasUpdate); static Query *fireRIRrules(Query *parsetree, List *activeRIRs); static Bitmapset *adjust_view_column_set(Bitmapset *cols, List *targetlist); ++<<<<<<< ours +static List *get_generated_columns(Relation rel, int rt_index, bool include_stored); ++======= + static Node *expand_generated_columns_internal(Node *node, Relation rel, int rt_index, + RangeTblEntry *rte); ++>>>>>>> theirs /* @@@ -679,9 -644,9 +684,15 @@@ rewriteRuleAction(Query *parsetree ReplaceVarsFromTargetList((Node *) sub_action, new_varno, 0, ++<<<<<<< ours + new_rte, + list_concat(gen_cols, parsetree->targetList), + sub_action->resultRelation, ++======= + rt_fetch(new_varno, sub_action->rtable), + parsetree->targetList, + 0, ++>>>>>>> theirs (event == CMD_UPDATE) ? REPLACEVARS_CHANGE_VARNO : REPLACEVARS_SUBSTITUTE_NULL, @@@ -2435,10 -2359,10 +2446,17 @@@ CopyAndAddInvertedQual(Query *parsetree new_qual = ReplaceVarsFromTargetList(new_qual, PRS2_NEW_VARNO, 0, ++<<<<<<< ours + rte, + list_concat(gen_cols, + parsetree->targetList), + parsetree->resultRelation, ++======= + rt_fetch(rt_index, + parsetree->rtable), + parsetree->targetList, + 0, ++>>>>>>> theirs (event == CMD_UPDATE) ? REPLACEVARS_CHANGE_VARNO : REPLACEVARS_SUBSTITUTE_NULL, @@@ -4595,18 -4456,22 +4624,27 @@@ RewriteQuery(Query *parsetree, List *re /* - * Expand virtual generated columns + * Get a table's generated columns * - * If the table contains virtual generated columns, build a target list - * containing the expanded expressions and use ReplaceVarsFromTargetList() to - * do the replacements. - * - * Vars matching rt_index at the current query level are replaced by the - * virtual generated column expressions from rel, if there are any. + * If include_stored is true, both stored and virtual generated columns are + * returned. Otherwise, only virtual generated columns are returned. * ++<<<<<<< ours + * Returns a list of TargetEntry, one for each generated column, containing + * the attribute numbers and generation expressions. + */ +static List * +get_generated_columns(Relation rel, int rt_index, bool include_stored) ++======= + * The caller must also provide rte, the RTE describing the target relation, + * in order to handle any whole-row Vars referencing the target. + */ + static Node * + expand_generated_columns_internal(Node *node, Relation rel, int rt_index, + RangeTblEntry *rte) ++>>>>>>> theirs { + List *gen_cols = NIL; TupleDesc tupdesc; tupdesc = RelationGetDescr(rel); @@@ -4628,12 -4492,18 +4666,21 @@@ ChangeVarNodes(defexpr, 1, rt_index, 0); te = makeTargetEntry((Expr *) defexpr, i + 1, 0, false); - tlist = lappend(tlist, te); + gen_cols = lappend(gen_cols, te); } } ++<<<<<<< ours ++======= + + Assert(list_length(tlist) > 0); + + node = ReplaceVarsFromTargetList(node, rt_index, 0, rte, tlist, 0, + REPLACEVARS_CHANGE_VARNO, rt_index, + NULL); ++>>>>>>> theirs } - return node; + return gen_cols; } /* @@@ -4658,19 -4527,7 +4705,23 @@@ expand_generated_columns_in_expr(Node * rte->rtekind = RTE_RELATION; rte->relid = RelationGetRelid(rel); ++<<<<<<< ours + vcols = get_generated_columns(rel, rt_index, false); + + if (vcols) + { + /* + * Passing NULL for outer_hasSubLinks is safe because generation + * expressions cannot contain SubLinks, so the replacement cannot + * introduce any. + */ + node = ReplaceVarsFromTargetList(node, rt_index, 0, rte, vcols, 0, + REPLACEVARS_CHANGE_VARNO, rt_index, + NULL); + } ++======= + node = expand_generated_columns_internal(node, rel, rt_index, rte); ++>>>>>>> theirs } return node;