aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/nodeIndexscan.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/executor/nodeIndexscan.c')
-rw-r--r--src/backend/executor/nodeIndexscan.c20
1 files changed, 6 insertions, 14 deletions
diff --git a/src/backend/executor/nodeIndexscan.c b/src/backend/executor/nodeIndexscan.c
index 399ac0109c3..c97eb60f779 100644
--- a/src/backend/executor/nodeIndexscan.c
+++ b/src/backend/executor/nodeIndexscan.c
@@ -196,6 +196,8 @@ IndexNextWithReorder(IndexScanState *node)
scandesc = node->iss_ScanDesc;
econtext = node->ss.ps.ps_ExprContext;
+ slot = node->ss.ss_ScanTupleSlot;
+
if (scandesc == NULL)
{
/*
@@ -231,7 +233,6 @@ IndexNextWithReorder(IndexScanState *node)
*/
if (!pairingheap_is_empty(node->iss_ReorderQueue))
{
- slot = node->iss_ReorderQueueSlot;
topmost = (ReorderTuple *) pairingheap_first(node->iss_ReorderQueue);
if (node->iss_ReachedEnd ||
@@ -246,22 +247,20 @@ IndexNextWithReorder(IndexScanState *node)
tuple = reorderqueue_pop(node);
/* Pass 'true', as the tuple in the queue is a palloc'd copy */
- ExecStoreHeapTuple(tuple, slot, true);
+ ExecForceStoreHeapTuple(tuple, slot, true);
return slot;
}
}
else if (node->iss_ReachedEnd)
{
/* Queue is empty, and no more tuples from index. We're done. */
- ExecClearTuple(node->iss_ReorderQueueSlot);
- return ExecClearTuple(node->ss.ss_ScanTupleSlot);
+ return ExecClearTuple(slot);
}
/*
* Fetch next tuple from the index.
*/
next_indextuple:
- slot = node->ss.ss_ScanTupleSlot;
if (!index_getnext_slot(scandesc, ForwardScanDirection, slot))
{
/*
@@ -354,8 +353,7 @@ next_indextuple:
* if we get here it means the index scan failed so we are at the end of
* the scan..
*/
- ExecClearTuple(node->iss_ReorderQueueSlot);
- return ExecClearTuple(node->ss.ss_ScanTupleSlot);
+ return ExecClearTuple(slot);
}
/*
@@ -807,8 +805,6 @@ ExecEndIndexScan(IndexScanState *node)
*/
if (node->ss.ps.ps_ResultTupleSlot)
ExecClearTuple(node->ss.ps.ps_ResultTupleSlot);
- if (node->iss_ReorderQueueSlot)
- ExecClearTuple(node->iss_ReorderQueueSlot);
ExecClearTuple(node->ss.ss_ScanTupleSlot);
/*
@@ -1055,13 +1051,9 @@ ExecInitIndexScan(IndexScan *node, EState *estate, int eflags)
indexstate->iss_OrderByNulls = (bool *)
palloc(numOrderByKeys * sizeof(bool));
- /* and initialize the reorder queue and the corresponding slot */
+ /* and initialize the reorder queue */
indexstate->iss_ReorderQueue = pairingheap_allocate(reorderqueue_cmp,
indexstate);
- indexstate->iss_ReorderQueueSlot =
- ExecAllocTableSlot(&estate->es_tupleTable,
- RelationGetDescr(currentRelation),
- &TTSOpsHeapTuple);
}
/*