From a064078f3cc917cd548f20cc7327516c3905b35b Mon Sep 17 00:00:00 2001 From: kommih Date: Tue, 21 Aug 2018 16:28:46 +1000 Subject: [PATCH] isolation test fixes -2 --- src/backend/commands/trigger.c | 6 +++++- src/backend/executor/execMain.c | 9 +++++++-- src/backend/executor/nodeModifyTable.c | 4 ++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index b2951a237e..801a3fee25 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -3326,7 +3326,11 @@ GetTupleForTrigger(EState *estate, if (TupIsNull(epqslot)) return false; - ExecCopySlot(newslot, epqslot); + if (newslot) + ExecCopySlot(newslot, epqslot); + else + ExecCopySlot(oldslot, epqslot); + *is_epqtuple = true; } break; diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index fd3e53d1ee..dbbebca045 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -2477,8 +2477,13 @@ EvalPlanQualSlot(EPQState *epqstate, MemoryContext oldcontext; oldcontext = MemoryContextSwitchTo(epqstate->estate->es_query_cxt); - *slot = table_gimmegimmeslot(relation, - &epqstate->estate->es_tupleTable); + + if (relation) + *slot = table_gimmegimmeslot(relation, &epqstate->estate->es_tupleTable); + else + *slot = MakeTupleTableSlot(epqstate->origslot->tts_tupleDescriptor, TTS_TYPE_BUFFER); + + epqstate->estate->es_epqTupleSet[rti - 1] = true; MemoryContextSwitchTo(oldcontext); } diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 71150ad32e..14ca3b976e 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -702,6 +702,9 @@ ldelete:; if (result == HeapTupleUpdated && !IsolationUsesXactSnapshot()) { + EvalPlanQualBegin(epqstate, estate); + slot = EvalPlanQualSlot(epqstate, resultRelationDesc, resultRelInfo->ri_RangeTableIndex); + result = table_lock_tuple(resultRelationDesc, tupleid, estate->es_snapshot, slot, estate->es_output_cid, @@ -1182,6 +1185,7 @@ lreplace:; EvalPlanQualBegin(epqstate, estate); inputslot = EvalPlanQualSlot(epqstate, resultRelationDesc, resultRelInfo->ri_RangeTableIndex); + ExecCopySlot(inputslot, slot); result = table_lock_tuple(resultRelationDesc, tupleid, estate->es_snapshot, -- 2.18.0.windows.1