8
8
* Portions Copyright (c) 1994, Regents of the University of California
9
9
*
10
10
* IDENTIFICATION
11
- * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtsearch.c,v 1.97 2005/11/22 18:17:06 momjian Exp $
11
+ * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtsearch.c,v 1.98 2005/12/07 18:03:48 tgl Exp $
12
12
*
13
13
*-------------------------------------------------------------------------
14
14
*/
@@ -889,9 +889,9 @@ _bt_first(IndexScanDesc scan, ScanDirection dir)
889
889
bool
890
890
_bt_step (IndexScanDesc scan , Buffer * bufP , ScanDirection dir )
891
891
{
892
- Relation rel = scan -> indexRelation ;
893
892
ItemPointer current = & (scan -> currentItemData );
894
893
BTScanOpaque so = (BTScanOpaque ) scan -> opaque ;
894
+ Relation rel ;
895
895
Page page ;
896
896
BTPageOpaque opaque ;
897
897
OffsetNumber offnum ,
@@ -905,16 +905,17 @@ _bt_step(IndexScanDesc scan, Buffer *bufP, ScanDirection dir)
905
905
offnum = current -> ip_posid ;
906
906
907
907
page = BufferGetPage (* bufP );
908
- opaque = (BTPageOpaque ) PageGetSpecialPointer (page );
909
908
maxoff = PageGetMaxOffsetNumber (page );
910
909
911
910
if (ScanDirectionIsForward (dir ))
912
911
{
913
- if (! PageIsEmpty ( page ) && offnum < maxoff )
912
+ if (offnum < maxoff )
914
913
offnum = OffsetNumberNext (offnum );
915
914
else
916
915
{
917
916
/* Walk right to the next page with data */
917
+ rel = scan -> indexRelation ;
918
+ opaque = (BTPageOpaque ) PageGetSpecialPointer (page );
918
919
for (;;)
919
920
{
920
921
/* if we're at end of scan, release the buffer and return */
@@ -932,10 +933,10 @@ _bt_step(IndexScanDesc scan, Buffer *bufP, ScanDirection dir)
932
933
opaque = (BTPageOpaque ) PageGetSpecialPointer (page );
933
934
if (!P_IGNORE (opaque ))
934
935
{
935
- maxoff = PageGetMaxOffsetNumber (page );
936
936
/* done if it's not empty */
937
+ maxoff = PageGetMaxOffsetNumber (page );
937
938
offnum = P_FIRSTDATAKEY (opaque );
938
- if (! PageIsEmpty ( page ) && offnum <= maxoff )
939
+ if (offnum <= maxoff )
939
940
break ;
940
941
}
941
942
}
@@ -944,6 +945,7 @@ _bt_step(IndexScanDesc scan, Buffer *bufP, ScanDirection dir)
944
945
else
945
946
{
946
947
/* backwards scan */
948
+ opaque = (BTPageOpaque ) PageGetSpecialPointer (page );
947
949
if (offnum > P_FIRSTDATAKEY (opaque ))
948
950
offnum = OffsetNumberPrev (offnum );
949
951
else
@@ -955,6 +957,7 @@ _bt_step(IndexScanDesc scan, Buffer *bufP, ScanDirection dir)
955
957
* plus the possibility that the page we were on gets deleted
956
958
* after we leave it. See nbtree/README for details.
957
959
*/
960
+ rel = scan -> indexRelation ;
958
961
for (;;)
959
962
{
960
963
* bufP = _bt_walk_left (rel , * bufP );
@@ -978,8 +981,7 @@ _bt_step(IndexScanDesc scan, Buffer *bufP, ScanDirection dir)
978
981
{
979
982
maxoff = PageGetMaxOffsetNumber (page );
980
983
offnum = maxoff ;
981
- if (!PageIsEmpty (page ) &&
982
- maxoff >= P_FIRSTDATAKEY (opaque ))
984
+ if (maxoff >= P_FIRSTDATAKEY (opaque ))
983
985
break ;
984
986
}
985
987
}
0 commit comments