diff options
Diffstat (limited to 'src/backend/executor/nodeSeqscan.c')
-rw-r--r-- | src/backend/executor/nodeSeqscan.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/backend/executor/nodeSeqscan.c b/src/backend/executor/nodeSeqscan.c index 97a765453a2..17461a827f6 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.47 2003/11/29 19:51:48 pgsql Exp $ + * $PostgreSQL: pgsql/src/backend/executor/nodeSeqscan.c,v 1.48 2004/04/21 18:24:26 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -62,6 +62,15 @@ SeqNext(SeqScanState *node) slot = node->ss_ScanTupleSlot; /* + * Clear any reference to the previously returned tuple. The idea here + * is to not have the tuple slot be the last holder of a pin on that + * tuple's buffer; if it is, we'll need a separate visit to the bufmgr + * to release the buffer. By clearing here, we get to have the release + * done by ReleaseAndReadBuffer inside heap_getnext. + */ + ExecClearTuple(slot); + + /* * Check if we are evaluating PlanQual for tuple of this relation. * Additional checking is not good, but no other way for now. We could * introduce new nodes for this case and handle SeqScan --> NewNode @@ -70,7 +79,6 @@ SeqNext(SeqScanState *node) if (estate->es_evTuple != NULL && estate->es_evTuple[scanrelid - 1] != NULL) { - ExecClearTuple(slot); if (estate->es_evTupleNull[scanrelid - 1]) return slot; /* return empty slot */ |