Skip to content
Snippets Groups Projects
Commit 4ce4d7f7 authored by Tom Lane's avatar Tom Lane
Browse files

Rearrange heap_beginscan to eliminate extra call on

mdnblocks.  Bad enough it does an lseek, but to do it twice for no
reason...
parent 57ea2084
Branches
Tags
No related merge requests found
...@@ -7,7 +7,7 @@ ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment