mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Rearrange heap_beginscan to eliminate extra call on
mdnblocks. Bad enough it does an lseek, but to do it twice for no reason...
This commit is contained in:
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.56 1999/10/11 06:28:27 inoue Exp $
|
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.57 1999/10/30 23:10:21 tgl Exp $
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* INTERFACE ROUTINES
|
* INTERFACE ROUTINES
|
||||||
@ -102,7 +102,16 @@ initscan(HeapScanDesc scan,
|
|||||||
unsigned nkeys,
|
unsigned nkeys,
|
||||||
ScanKey key)
|
ScanKey key)
|
||||||
{
|
{
|
||||||
if (!RelationGetNumberOfBlocks(relation))
|
/* ----------------
|
||||||
|
* Make sure we have up-to-date idea of number of blocks in relation.
|
||||||
|
* It is sufficient to do this once at scan start, since any tuples
|
||||||
|
* added while the scan is in progress will be invisible to my
|
||||||
|
* transaction anyway...
|
||||||
|
* ----------------
|
||||||
|
*/
|
||||||
|
relation->rd_nblocks = RelationGetNumberOfBlocks(relation);
|
||||||
|
|
||||||
|
if (relation->rd_nblocks == 0)
|
||||||
{
|
{
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* relation is empty
|
* relation is empty
|
||||||
@ -652,11 +661,12 @@ heap_beginscan(Relation relation,
|
|||||||
*/
|
*/
|
||||||
scan = (HeapScanDesc) palloc(sizeof(HeapScanDescData));
|
scan = (HeapScanDesc) palloc(sizeof(HeapScanDescData));
|
||||||
|
|
||||||
relation->rd_nblocks = smgrnblocks(DEFAULT_SMGR, relation);
|
|
||||||
scan->rs_rd = relation;
|
scan->rs_rd = relation;
|
||||||
|
scan->rs_atend = atend;
|
||||||
|
scan->rs_snapshot = snapshot;
|
||||||
|
scan->rs_nkeys = (short) nkeys;
|
||||||
|
|
||||||
if (nkeys)
|
if (nkeys)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* we do this here instead of in initscan() because heap_rescan
|
* we do this here instead of in initscan() because heap_rescan
|
||||||
* also calls initscan() and we don't want to allocate memory
|
* also calls initscan() and we don't want to allocate memory
|
||||||
@ -668,10 +678,6 @@ heap_beginscan(Relation relation,
|
|||||||
|
|
||||||
initscan(scan, relation, atend, nkeys, key);
|
initscan(scan, relation, atend, nkeys, key);
|
||||||
|
|
||||||
scan->rs_atend = atend;
|
|
||||||
scan->rs_snapshot = snapshot;
|
|
||||||
scan->rs_nkeys = (short) nkeys;
|
|
||||||
|
|
||||||
return scan;
|
return scan;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -703,8 +709,8 @@ heap_rescan(HeapScanDesc scan,
|
|||||||
* reinitialize scan descriptor
|
* reinitialize scan descriptor
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
initscan(scan, scan->rs_rd, scanFromEnd, scan->rs_nkeys, key);
|
|
||||||
scan->rs_atend = (bool) scanFromEnd;
|
scan->rs_atend = (bool) scanFromEnd;
|
||||||
|
initscan(scan, scan->rs_rd, scanFromEnd, scan->rs_nkeys, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
@ -1096,7 +1102,7 @@ heap_get_latest_tid(Relation relation,
|
|||||||
Snapshot snapshot,
|
Snapshot snapshot,
|
||||||
ItemPointer tid)
|
ItemPointer tid)
|
||||||
{
|
{
|
||||||
ItemId lp;
|
ItemId lp = NULL;
|
||||||
Buffer buffer;
|
Buffer buffer;
|
||||||
PageHeader dp;
|
PageHeader dp;
|
||||||
OffsetNumber offnum;
|
OffsetNumber offnum;
|
||||||
|
Reference in New Issue
Block a user