@@ -11,7 +11,7 @@ index f27e458482..ea47c341c1 100644
1111 pg_stat_statements \
1212 pg_surgery\
1313diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
14- indexca6f6d57d3..8ab313b910 100644
14+ indexbf551b0395..10d2044ae6 100644
1515--- a/src/backend/access/transam/xact.c
1616+++ b/src/backend/access/transam/xact.c
1717@@ -76,7 +76,7 @@ intDefaultXactIsoLevel = XACT_READ_COMMITTED;
@@ -24,7 +24,7 @@ index ca6f6d57d3..8ab313b910 100644
2424 boolDefaultXactDeferrable = false;
2525 boolXactDeferrable;
2626diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c
27- index5483dee650..e2864e6ae9 100644
27+ index6b63f93e6d..060146d127 100644
2828--- a/src/backend/executor/execExprInterp.c
2929+++ b/src/backend/executor/execExprInterp.c
3030@@ -1799,6 +1799,16 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull)
@@ -77,10 +77,10 @@ index b3ce4bae53..8f2bb12542 100644
7777 * ResultRelInfos needed by subplans are initialized from scratch when the
7878 * subplans themselves are initialized.
7979diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c
80- indexd328856ae5..27235ec869 100644
80+ index0780554246..a90f3a495d 100644
8181--- a/src/backend/executor/nodeModifyTable.c
8282+++ b/src/backend/executor/nodeModifyTable.c
83- @@ -450 ,7 +450 ,7 @@ ExecInitInsertProjection(ModifyTableState *mtstate,
83+ @@ -510 ,7 +510 ,7 @@ ExecInitInsertProjection(ModifyTableState *mtstate,
8484 * This is also a convenient place to verify that the output of an UPDATE
8585 * matches the target table (ExecBuildUpdateProjection does that).
8686 */
@@ -89,15 +89,15 @@ index d328856ae5..27235ec869 100644
8989 ExecInitUpdateProjection(ModifyTableState *mtstate,
9090 ResultRelInfo *resultRelInfo)
9191 {
92- @@ -2363 ,6 +2363 ,7 @@ ExecModifyTable(PlanState *pstate)
93- PartitionTupleRouting *proute = node->mt_partition_tuple_routing ;
94- List *relinfos = NIL ;
95- ListCell *lc ;
92+ @@ -2487 ,6 +2487 ,7 @@ ExecModifyTable(PlanState *pstate)
93+ ItemPointerData tuple_ctid ;
94+ HeapTupleData oldtupdata ;
95+ HeapTupleoldtuple ;
9696+ ResultRelInfo *saved_resultRelInfo;
9797
9898 CHECK_FOR_INTERRUPTS();
9999
100- @@ -2400 ,12 +2401 ,23 @@ ExecModifyTable(PlanState *pstate)
100+ @@ -2524 ,12 +2525 ,23 @@ ExecModifyTable(PlanState *pstate)
101101 resultRelInfo = node->resultRelInfo + node->mt_lastResultIndex;
102102 subplanstate = outerPlanState(node);
103103
@@ -111,7 +111,7 @@ index d328856ae5..27235ec869 100644
111111 for (;;)
112112 {
113113+ /*
114- + * "es_original_tuple" shouldcontain original modified tuple (new
114+ + * "es_original_tuple" shouldcontains original modified tuple (new
115115+ * values of the changed columns plus row identity information such as
116116+ * CTID) in case tuple planSlot is replaced in pg_pathman to new value
117117+ * in call "ExecProcNode(subplanstate)".
@@ -121,7 +121,7 @@ index d328856ae5..27235ec869 100644
121121 /*
122122 * Reset the per-output-tuple exprcontext. This is needed because
123123 * triggers expect to use that context as workspace. It's a bit ugly
124- @@ -2439 ,7 +2451 ,9 @@ ExecModifyTable(PlanState *pstate)
124+ @@ -2563 ,7 +2575 ,9 @@ ExecModifyTable(PlanState *pstate)
125125 boolisNull;
126126 Oidresultoid;
127127
@@ -132,7 +132,7 @@ index d328856ae5..27235ec869 100644
132132 &isNull);
133133 if (isNull)
134134 elog(ERROR, "tableoid is NULL");
135- @@ -2458 ,6 +2472 ,8 @@ ExecModifyTable(PlanState *pstate)
135+ @@ -2582 ,6 +2596 ,8 @@ ExecModifyTable(PlanState *pstate)
136136 if (resultRelInfo->ri_usesFdwDirectModify)
137137 {
138138 Assert(resultRelInfo->ri_projectReturning);
@@ -141,15 +141,15 @@ index d328856ae5..27235ec869 100644
141141
142142 /*
143143 * A scan slot containing the data that was actually inserted,
144- @@ -2467 ,6 +2483 ,7 @@ ExecModifyTable(PlanState *pstate)
144+ @@ -2591 ,6 +2607 ,7 @@ ExecModifyTable(PlanState *pstate)
145145 */
146146 slot = ExecProcessReturning(resultRelInfo, NULL, planSlot);
147147
148148+ estate->es_result_relation_info = saved_resultRelInfo;
149149 return slot;
150150 }
151151
152- @@ -2496 ,7 +2513 ,8 @@ ExecModifyTable(PlanState *pstate)
152+ @@ -2620 ,7 +2637 ,8 @@ ExecModifyTable(PlanState *pstate)
153153 {
154154 /* ri_RowIdAttNo refers to a ctid attribute */
155155 Assert(AttributeNumberIsValid(resultRelInfo->ri_RowIdAttNo));
@@ -159,7 +159,7 @@ index d328856ae5..27235ec869 100644
159159 resultRelInfo->ri_RowIdAttNo,
160160 &isNull);
161161 /* shouldn't ever get a null result... */
162- @@ -2526 ,7 +2544 ,8 @@ ExecModifyTable(PlanState *pstate)
162+ @@ -2650 ,7 +2668 ,8 @@ ExecModifyTable(PlanState *pstate)
163163 */
164164 else if (AttributeNumberIsValid(resultRelInfo->ri_RowIdAttNo))
165165 {
@@ -169,7 +169,7 @@ index d328856ae5..27235ec869 100644
169169 resultRelInfo->ri_RowIdAttNo,
170170 &isNull);
171171 /* shouldn't ever get a null result... */
172- @@ -2557 ,8 +2576 ,12 @@ ExecModifyTable(PlanState *pstate)
172+ @@ -2681 ,8 +2700 ,12 @@ ExecModifyTable(PlanState *pstate)
173173 /* Initialize projection info if first time for this table */
174174 if (unlikely(!resultRelInfo->ri_projectNewInfoValid))
175175 ExecInitInsertProjection(node, resultRelInfo);
@@ -184,7 +184,7 @@ index d328856ae5..27235ec869 100644
184184 estate, node->canSetTag);
185185 break;
186186 case CMD_UPDATE:
187- @@ -2566 ,37 +2589 ,45 @@ ExecModifyTable(PlanState *pstate)
187+ @@ -2690 ,37 +2713 ,45 @@ ExecModifyTable(PlanState *pstate)
188188 if (unlikely(!resultRelInfo->ri_projectNewInfoValid))
189189 ExecInitUpdateProjection(node, resultRelInfo);
190190
@@ -253,7 +253,7 @@ index d328856ae5..27235ec869 100644
253253 planSlot, &node->mt_epqstate, estate,
254254 true, /* processReturning */
255255 node->canSetTag,
256- @@ -2613 ,7 +2644 ,10 @@ ExecModifyTable(PlanState *pstate)
256+ @@ -2737 ,7 +2768 ,10 @@ ExecModifyTable(PlanState *pstate)
257257 * the work on next call.
258258 */
259259 if (slot)
@@ -264,23 +264,23 @@ index d328856ae5..27235ec869 100644
264264 }
265265
266266 /*
267- @@ -2642 ,6 +2676 ,7 @@ ExecModifyTable(PlanState *pstate)
267+ @@ -2753 ,6 +2787 ,7 @@ ExecModifyTable(PlanState *pstate)
268268
269269 node->mt_done = true;
270270
271271+ estate->es_result_relation_info = saved_resultRelInfo;
272272 return NULL;
273273 }
274274
275- @@ -2716 ,6 +2751 ,7 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
275+ @@ -2827 ,6 +2862 ,7 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
276276 ListCell *l;
277277 inti;
278278 Relationrel;
279279+ ResultRelInfo *saved_resultRelInfo;
280280
281281 /* check for unsupported flags */
282282 Assert(!(eflags & (EXEC_FLAG_BACKWARD | EXEC_FLAG_MARK)));
283- @@ -2812 ,6 +2848 ,13 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
283+ @@ -2923 ,6 +2959 ,13 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
284284 i++;
285285 }
286286
@@ -294,8 +294,8 @@ index d328856ae5..27235ec869 100644
294294 /*
295295 * Now we may initialize the subplan.
296296 */
297- @@ -2884 ,6 +2927 ,8 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
298- }
297+ @@ -3004 ,6 +3047 ,8 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
298+ ExecInitStoredGenerated(resultRelInfo, estate, operation);
299299 }
300300
301301+ estate->es_result_relation_info = saved_resultRelInfo;
@@ -304,7 +304,7 @@ index d328856ae5..27235ec869 100644
304304 * If this is an inherited update/delete, there will be a junk attribute
305305 * named "tableoid" present in the subplan's targetlist. It will be used
306306diff --git a/src/backend/utils/init/globals.c b/src/backend/utils/init/globals.c
307- index 381d9e548d..9d101c3a86 100644
307+ index 381d9e548d..0a4657d291 100644
308308--- a/src/backend/utils/init/globals.c
309309+++ b/src/backend/utils/init/globals.c
310310@@ -25,7 +25,7 @@
@@ -317,7 +317,7 @@ index 381d9e548d..9d101c3a86 100644
317317 volatile sig_atomic_t InterruptPending = false;
318318 volatile sig_atomic_t QueryCancelPending = false;
319319diff --git a/src/include/access/xact.h b/src/include/access/xact.h
320- index134f6862da..92ff475332 100644
320+ index5af78bd0dc..0c13bc9d83 100644
321321--- a/src/include/access/xact.h
322322+++ b/src/include/access/xact.h
323323@@ -53,7 +53,9 @@ extern PGDLLIMPORT int XactIsoLevel;
@@ -357,7 +357,7 @@ index 3dc03c913e..1002d97499 100644
357357
358358 #endif/* EXECUTOR_H */
359359diff --git a/src/include/libpq/libpq-be.h b/src/include/libpq/libpq-be.h
360- index02015efe13..2091f7f3b7 100644
360+ index4acb1cda6e..fd8d38347d 100644
361361--- a/src/include/libpq/libpq-be.h
362362+++ b/src/include/libpq/libpq-be.h
363363@@ -327,7 +327,7 @@ extern ssize_t be_gssapi_read(Port *port, void *ptr, size_t len);
@@ -370,10 +370,10 @@ index 02015efe13..2091f7f3b7 100644
370370 /* TCP keepalives configuration. These are no-ops on an AF_UNIX socket. */
371371
372372diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h
373- index105180764e..2a40d2ce15 100644
373+ indexee5ad3c058..dc474819d7 100644
374374--- a/src/include/nodes/execnodes.h
375375+++ b/src/include/nodes/execnodes.h
376- @@ -579 ,6 +579 ,12 @@ typedef struct EState
376+ @@ -592 ,6 +592 ,12 @@ typedef struct EState
377377 * es_result_relations in no
378378 * specific order */
379379
@@ -419,7 +419,7 @@ index de22c9ba2c..c8be5323b8 100644
419419
420420 sub CopyIncludeFiles
421421diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
422- index05ff67e693..d169271df1 100644
422+ index9b6539fb15..f8a67c6701 100644
423423--- a/src/tools/msvc/Mkvcbuild.pm
424424+++ b/src/tools/msvc/Mkvcbuild.pm
425425@@ -41,7 +41,10 @@ my @contrib_uselibpq =
@@ -434,15 +434,15 @@ index 05ff67e693..d169271df1 100644
434434 my $contrib_extrasource = {
435435 'cube' => [ 'contrib/cube/cubescan.l', 'contrib/cube/cubeparse.y' ],
436436 'seg' => [ 'contrib/seg/segscan.l', 'contrib/seg/segparse.y' ],
437- @@ -970 ,6 +973 ,7 @@ sub AddContrib
437+ @@ -973 ,6 +976 ,7 @@ sub AddContrib
438438 my $dn = $1;
439439 my $proj = $solution->AddProject($dn, 'dll', 'contrib', "$subdir/$n");
440440 $proj->AddReference($postgres);
441441+ $proj->RemoveFile("$subdir/$n/src/declarative.c") if $n eq 'pg_pathman';
442442 AdjustContribProj($proj);
443443 }
444444 elsif ($mf =~ /^MODULES\s*=\s*(.*)$/mg)
445- @@ -999 ,6 +1003 ,19 @@ sub AddContrib
445+ @@ -1002 ,6 +1006 ,19 @@ sub AddContrib
446446 return;
447447 }
448448
@@ -462,7 +462,7 @@ index 05ff67e693..d169271df1 100644
462462 sub GenerateContribSqlFiles
463463 {
464464 my $n = shift;
465- @@ -1023 ,23 +1040 ,53 @@ sub GenerateContribSqlFiles
465+ @@ -1026 ,23 +1043 ,53 @@ sub GenerateContribSqlFiles
466466 substr($l, 0, index($l, '$(addsuffix ')) . substr($l, $i + 1);
467467 }
468468