mirror of
https://github.com/postgres/postgres.git
synced 2025-07-02 09:02:37 +03:00
Fix latent bug in ExecSeqRestrPos: it leaves the plan node's result slot
in an inconsistent state. (This is only latent because in reality ExecSeqRestrPos is dead code at the moment ... but someday maybe it won't be.) Add some comments about what the API for plan node mark/restore actually is, because it's not immediately obvious.
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user