* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtsearch.c,v 1.97 2005/11/22 18:17:06 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtsearch.c,v 1.98 2005/12/07 18:03:48 tgl Exp $
*
*-------------------------------------------------------------------------
*/
bool
_bt_step(IndexScanDesc scan, Buffer *bufP, ScanDirection dir)
{
- Relation rel = scan->indexRelation;
ItemPointer current = &(scan->currentItemData);
BTScanOpaque so = (BTScanOpaque) scan->opaque;
+ Relation rel;
Page page;
BTPageOpaque opaque;
OffsetNumber offnum,
offnum = current->ip_posid;
page = BufferGetPage(*bufP);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
maxoff = PageGetMaxOffsetNumber(page);
if (ScanDirectionIsForward(dir))
{
- if (!PageIsEmpty(page) && offnum < maxoff)
+ if (offnum < maxoff)
offnum = OffsetNumberNext(offnum);
else
{
/* Walk right to the next page with data */
+ rel = scan->indexRelation;
+ opaque = (BTPageOpaque) PageGetSpecialPointer(page);
for (;;)
{
/* if we're at end of scan, release the buffer and return */
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (!P_IGNORE(opaque))
{
- maxoff = PageGetMaxOffsetNumber(page);
/* done if it's not empty */
+ maxoff = PageGetMaxOffsetNumber(page);
offnum = P_FIRSTDATAKEY(opaque);
- if (!PageIsEmpty(page) && offnum <= maxoff)
+ if (offnum <= maxoff)
break;
}
}
else
{
/* backwards scan */
+ opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (offnum > P_FIRSTDATAKEY(opaque))
offnum = OffsetNumberPrev(offnum);
else
* plus the possibility that the page we were on gets deleted
* after we leave it. See nbtree/README for details.
*/
+ rel = scan->indexRelation;
for (;;)
{
*bufP = _bt_walk_left(rel, *bufP);
{
maxoff = PageGetMaxOffsetNumber(page);
offnum = maxoff;
- if (!PageIsEmpty(page) &&
- maxoff >= P_FIRSTDATAKEY(opaque))
+ if (maxoff >= P_FIRSTDATAKEY(opaque))
break;
}
}