Skip to content

Commit b0b91ce

Browse files
committed
1 parent 2b65bf0 commit b0b91ce

File tree

1 file changed

+13
-35
lines changed

1 file changed

+13
-35
lines changed

src/backend/executor/nodeModifyTable.c

Lines changed: 13 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,22 +1559,6 @@ ExecDelete(ModifyTableContext *context,
15591559
{
15601560
case TM_Ok:
15611561
Assert(context->tmfd.traversed);
1562-
1563-
/*
1564-
* Save locked tuple for further processing of
1565-
* RETURNING clause.
1566-
*/
1567-
if (processReturning &&
1568-
resultRelInfo->ri_projectReturning &&
1569-
!resultRelInfo->ri_FdwRoutine)
1570-
{
1571-
TupleTableSlot *returningSlot;
1572-
1573-
returningSlot = ExecGetReturningSlot(estate, resultRelInfo);
1574-
ExecCopySlot(returningSlot, inputslot);
1575-
ExecMaterializeSlot(returningSlot);
1576-
}
1577-
15781562
epqslot = EvalPlanQual(context->epqstate,
15791563
resultRelationDesc,
15801564
resultRelInfo->ri_RangeTableIndex,
@@ -1689,17 +1673,12 @@ ExecDelete(ModifyTableContext *context,
16891673
}
16901674
else
16911675
{
1692-
/*
1693-
* Tuple can be already fetched to the returning slot in case
1694-
* we've previously locked it. Fetch the tuple only if the slot
1695-
* is empty.
1696-
*/
16971676
slot = ExecGetReturningSlot(estate, resultRelInfo);
16981677
if (oldtuple != NULL)
16991678
{
17001679
ExecForceStoreHeapTuple(oldtuple, slot, false);
17011680
}
1702-
else if (TupIsNull(slot))
1681+
else
17031682
{
17041683
if (!table_tuple_fetch_row_version(resultRelationDesc, tupleid,
17051684
SnapshotAny, slot))
@@ -2414,19 +2393,6 @@ ExecUpdate(ModifyTableContext *context, ResultRelInfo *resultRelInfo,
24142393
case TM_Ok:
24152394
Assert(context->tmfd.traversed);
24162395

2417-
/* Make sure ri_oldTupleSlot is initialized. */
2418-
if (unlikely(!resultRelInfo->ri_projectNewInfoValid))
2419-
ExecInitUpdateProjection(context->mtstate,
2420-
resultRelInfo);
2421-
2422-
/*
2423-
* Save the locked tuple for further calculation
2424-
* of the new tuple.
2425-
*/
2426-
oldSlot = resultRelInfo->ri_oldTupleSlot;
2427-
ExecCopySlot(oldSlot, inputslot);
2428-
ExecMaterializeSlot(oldSlot);
2429-
24302396
epqslot = EvalPlanQual(context->epqstate,
24312397
resultRelationDesc,
24322398
resultRelInfo->ri_RangeTableIndex,
@@ -2435,6 +2401,18 @@ ExecUpdate(ModifyTableContext *context, ResultRelInfo *resultRelInfo,
24352401
/* Tuple not passing quals anymore, exiting... */
24362402
return NULL;
24372403

2404+
/* Make sure ri_oldTupleSlot is initialized. */
2405+
if (unlikely(!resultRelInfo->ri_projectNewInfoValid))
2406+
ExecInitUpdateProjection(context->mtstate,
2407+
resultRelInfo);
2408+
2409+
/* Fetch the most recent version of old tuple. */
2410+
oldSlot = resultRelInfo->ri_oldTupleSlot;
2411+
if (!table_tuple_fetch_row_version(resultRelationDesc,
2412+
tupleid,
2413+
SnapshotAny,
2414+
oldSlot))
2415+
elog(ERROR, "failed to fetch tuple being updated");
24382416
slot = ExecGetUpdateNewTuple(resultRelInfo,
24392417
epqslot, oldSlot);
24402418
goto redo_act;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy