0001-isolation-test-fixes-2.patch
application/octet-stream
Filename: 0001-isolation-test-fixes-2.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch 0001
Subject: isolation test fixes -2
| File | + | − |
|---|---|---|
| src/backend/commands/trigger.c | 5 | 1 |
| src/backend/executor/execMain.c | 7 | 2 |
| src/backend/executor/nodeModifyTable.c | 4 | 0 |
From a064078f3cc917cd548f20cc7327516c3905b35b Mon Sep 17 00:00:00 2001
From: kommih <haribabuk@fast.au.fujitsu.com>
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