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

