diff options
Diffstat (limited to 'src/backend/access/nbtree/nbtsearch.c')
| -rw-r--r-- | src/backend/access/nbtree/nbtsearch.c | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c index 470bab0c521..c392fd6cb31 100644 --- a/src/backend/access/nbtree/nbtsearch.c +++ b/src/backend/access/nbtree/nbtsearch.c @@ -100,9 +100,7 @@ _bt_search(Relation rel, int keysz, ScanKey scankey, bool nextkey, /* If index is empty and access = BT_READ, no root page is created. */ if (!BufferIsValid(*bufP)) - { return (BTStack) NULL; - } /* Loop iterates once per level descended in the tree */ for (;;) @@ -133,7 +131,7 @@ _bt_search(Relation rel, int keysz, ScanKey scankey, bool nextkey, BT_READ, snapshot); /* if this is a leaf page, we're done */ - page = BufferGetPage(*bufP, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(*bufP); opaque = (BTPageOpaque) PageGetSpecialPointer(page); if (P_ISLEAF(opaque)) break; @@ -242,7 +240,8 @@ _bt_moveright(Relation rel, for (;;) { - page = BufferGetPage(buf, snapshot, rel, BGP_TEST_FOR_OLD_SNAPSHOT); + page = BufferGetPage(buf); + TestForOldSnapshot(snapshot, rel, page); opaque = (BTPageOpaque) PageGetSpecialPointer(page); if (P_RIGHTMOST(opaque)) @@ -330,7 +329,7 @@ _bt_binsrch(Relation rel, int32 result, cmpval; - page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(buf); opaque = (BTPageOpaque) PageGetSpecialPointer(page); low = P_FIRSTDATAKEY(opaque); @@ -1153,7 +1152,7 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum) */ Assert(BufferIsValid(so->currPos.buf)); - page = BufferGetPage(so->currPos.buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(so->currPos.buf); opaque = (BTPageOpaque) PageGetSpecialPointer(page); minoff = P_FIRSTDATAKEY(opaque); maxoff = PageGetMaxOffsetNumber(page); @@ -1347,8 +1346,8 @@ _bt_steppage(IndexScanDesc scan, ScanDirection dir) /* step right one page */ so->currPos.buf = _bt_getbuf(rel, blkno, BT_READ); /* check for deleted page */ - page = BufferGetPage(so->currPos.buf, scan->xs_snapshot, rel, - BGP_TEST_FOR_OLD_SNAPSHOT); + page = BufferGetPage(so->currPos.buf); + TestForOldSnapshot(scan->xs_snapshot, rel, page); opaque = (BTPageOpaque) PageGetSpecialPointer(page); if (!P_IGNORE(opaque)) { @@ -1422,8 +1421,8 @@ _bt_steppage(IndexScanDesc scan, ScanDirection dir) * it's not half-dead and contains matching tuples. Else loop back * and do it all again. */ - page = BufferGetPage(so->currPos.buf, scan->xs_snapshot, rel, - BGP_TEST_FOR_OLD_SNAPSHOT); + page = BufferGetPage(so->currPos.buf); + TestForOldSnapshot(scan->xs_snapshot, rel, page); opaque = (BTPageOpaque) PageGetSpecialPointer(page); if (!P_IGNORE(opaque)) { @@ -1462,7 +1461,7 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot) Page page; BTPageOpaque opaque; - page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(buf); opaque = (BTPageOpaque) PageGetSpecialPointer(page); for (;;) @@ -1486,7 +1485,8 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot) /* check for interrupts while we're not holding any buffer lock */ CHECK_FOR_INTERRUPTS(); buf = _bt_getbuf(rel, blkno, BT_READ); - page = BufferGetPage(buf, snapshot, rel, BGP_TEST_FOR_OLD_SNAPSHOT); + page = BufferGetPage(buf); + TestForOldSnapshot(snapshot, rel, page); opaque = (BTPageOpaque) PageGetSpecialPointer(page); /* @@ -1512,14 +1512,15 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot) break; blkno = opaque->btpo_next; buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ); - page = BufferGetPage(buf, snapshot, rel, - BGP_TEST_FOR_OLD_SNAPSHOT); + page = BufferGetPage(buf); + TestForOldSnapshot(snapshot, rel, page); opaque = (BTPageOpaque) PageGetSpecialPointer(page); } /* Return to the original page to see what's up */ buf = _bt_relandgetbuf(rel, buf, obknum, BT_READ); - page = BufferGetPage(buf, snapshot, rel, BGP_TEST_FOR_OLD_SNAPSHOT); + page = BufferGetPage(buf); + TestForOldSnapshot(snapshot, rel, page); opaque = (BTPageOpaque) PageGetSpecialPointer(page); if (P_ISDELETED(opaque)) { @@ -1536,8 +1537,8 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot) RelationGetRelationName(rel)); blkno = opaque->btpo_next; buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ); - page = BufferGetPage(buf, snapshot, rel, - BGP_TEST_FOR_OLD_SNAPSHOT); + page = BufferGetPage(buf); + TestForOldSnapshot(snapshot, rel, page); opaque = (BTPageOpaque) PageGetSpecialPointer(page); if (!P_ISDELETED(opaque)) break; @@ -1597,7 +1598,8 @@ _bt_get_endpoint(Relation rel, uint32 level, bool rightmost, if (!BufferIsValid(buf)) return InvalidBuffer; - page = BufferGetPage(buf, snapshot, rel, BGP_TEST_FOR_OLD_SNAPSHOT); + page = BufferGetPage(buf); + TestForOldSnapshot(snapshot, rel, page); opaque = (BTPageOpaque) PageGetSpecialPointer(page); for (;;) @@ -1616,8 +1618,8 @@ _bt_get_endpoint(Relation rel, uint32 level, bool rightmost, elog(ERROR, "fell off the end of index \"%s\"", RelationGetRelationName(rel)); buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ); - page = BufferGetPage(buf, snapshot, rel, - BGP_TEST_FOR_OLD_SNAPSHOT); + page = BufferGetPage(buf); + TestForOldSnapshot(snapshot, rel, page); opaque = (BTPageOpaque) PageGetSpecialPointer(page); } @@ -1638,7 +1640,7 @@ _bt_get_endpoint(Relation rel, uint32 level, bool rightmost, blkno = ItemPointerGetBlockNumber(&(itup->t_tid)); buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ); - page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(buf); opaque = (BTPageOpaque) PageGetSpecialPointer(page); } @@ -1684,7 +1686,7 @@ _bt_endpoint(IndexScanDesc scan, ScanDirection dir) } PredicateLockPage(rel, BufferGetBlockNumber(buf), scan->xs_snapshot); - page = BufferGetPage(buf, NULL, NULL, BGP_NO_SNAPSHOT_TEST); + page = BufferGetPage(buf); opaque = (BTPageOpaque) PageGetSpecialPointer(page); Assert(P_ISLEAF(opaque)); |
