diff options
Diffstat (limited to 'src/backend/executor/nodeSeqscan.c')
-rw-r--r-- | src/backend/executor/nodeSeqscan.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/backend/executor/nodeSeqscan.c b/src/backend/executor/nodeSeqscan.c index f5a284a26bf..fab526f399c 100644 --- a/src/backend/executor/nodeSeqscan.c +++ b/src/backend/executor/nodeSeqscan.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/executor/nodeSeqscan.c,v 1.52 2005/03/16 21:38:07 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/executor/nodeSeqscan.c,v 1.53 2005/05/15 21:19:55 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -342,9 +342,8 @@ ExecSeqReScan(SeqScanState *node, ExprContext *exprCtxt) void ExecSeqMarkPos(SeqScanState *node) { - HeapScanDesc scan; + HeapScanDesc scan = node->ss_currentScanDesc; - scan = node->ss_currentScanDesc; heap_markpos(scan); } @@ -357,8 +356,15 @@ ExecSeqMarkPos(SeqScanState *node) void ExecSeqRestrPos(SeqScanState *node) { - HeapScanDesc scan; + HeapScanDesc scan = node->ss_currentScanDesc; + + /* + * Clear any reference to the previously returned tuple. This is + * needed because the slot is simply pointing at scan->rs_cbuf, which + * heap_restrpos will change; we'd have an internally inconsistent + * slot if we didn't do this. + */ + ExecClearTuple(node->ss_ScanTupleSlot); - scan = node->ss_currentScanDesc; heap_restrpos(scan); } |