From 3e4d02fd2ade9b9b116b013899b4b81b435379a8 Mon Sep 17 00:00:00 2001 From: kommih Date: Fri, 3 Aug 2018 11:29:05 +1000 Subject: [PATCH 2/2] Isolation test fixes -1 --- src/backend/access/heap/heapam_handler.c | 9 ++++++--- src/backend/executor/execMain.c | 5 +++-- src/backend/executor/nodeModifyTable.c | 6 +++++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index a3fe110efe..cce2123416 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -317,7 +317,8 @@ retry: if (!TransactionIdEquals(HeapTupleHeaderGetXmin(tuple->t_data), priorXmax)) { - ReleaseBuffer(buffer); + if (BufferIsValid(buffer)) + ReleaseBuffer(buffer); return HeapTupleDeleted; } @@ -336,7 +337,8 @@ retry: if (ItemPointerEquals(&tuple->t_self, &tuple->t_data->t_ctid)) { /* deleted, so forget about it */ - ReleaseBuffer(buffer); + if (BufferIsValid(buffer)) + ReleaseBuffer(buffer); return HeapTupleDeleted; } @@ -344,7 +346,8 @@ retry: *tid = tuple->t_data->t_ctid; /* updated row should have xmin matching this xmax */ priorXmax = HeapTupleHeaderGetUpdateXid(tuple->t_data); - ReleaseBuffer(buffer); + if (BufferIsValid(buffer)) + ReleaseBuffer(buffer); /* loop back to fetch next in chain */ } } diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index ea60e588a5..fd3e53d1ee 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -2552,8 +2552,9 @@ EvalPlanQual(EState *estate, EPQState *epqstate, * datums that may be present in copyTuple). As with the next step, this * is to guard against early re-use of the EPQ query. */ - if (!TupIsNull(slot)) - ExecMaterializeSlot(slot); + /*if (!TupIsNull(slot)) + * ExecMaterializeSlot(slot); + */ #if FIXME /* diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 5ae0bab9f5..71150ad32e 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -1177,7 +1177,11 @@ lreplace:; if (result == HeapTupleUpdated && !IsolationUsesXactSnapshot()) { - TupleTableSlot *inputslot = EvalPlanQualSlot(epqstate, resultRelationDesc, resultRelInfo->ri_RangeTableIndex); + TupleTableSlot *inputslot; + + EvalPlanQualBegin(epqstate, estate); + + inputslot = EvalPlanQualSlot(epqstate, resultRelationDesc, resultRelInfo->ri_RangeTableIndex); result = table_lock_tuple(resultRelationDesc, tupleid, estate->es_snapshot, -- 2.18.0.windows.1