]> granicus.if.org Git - postgresql/commitdiff
Minor code-cleanliness improvements for btree.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 18 Sep 2017 20:36:28 +0000 (16:36 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 18 Sep 2017 20:36:28 +0000 (16:36 -0400)
Make the btree page-flags test macros (P_ISLEAF and friends) return clean
boolean values, rather than values that might not fit in a bool.  Use them
in a few places that were randomly referencing the flag bits directly.

In passing, change access/nbtree/'s only direct use of BUFFER_LOCK_SHARE to
BT_READ.  (Some think we should go the other way, but as long as we have
BT_READ/BT_WRITE, let's use them consistently.)

Masahiko Sawada, reviewed by Doug Doole

Discussion: https://postgr.es/m/CAD21AoBmWPeN=WBB5Jvyz_Nt3rmW1ebUyAnk3ZbJP3RMXALJog@mail.gmail.com

contrib/amcheck/verify_nbtree.c
contrib/pgstattuple/pgstattuple.c
src/backend/access/nbtree/nbtpage.c
src/backend/access/nbtree/nbtxlog.c
src/include/access/nbtree.h

index 9ae83dc8399baffdca35e3695596ac1a773b6992..868c14ec8feec7a3293481bc3f03d9ef07d1f2fa 100644 (file)
@@ -1195,7 +1195,7 @@ palloc_btree_page(BtreeCheckState *state, BlockNumber blocknum)
 
        opaque = (BTPageOpaque) PageGetSpecialPointer(page);
 
-       if (opaque->btpo_flags & BTP_META && blocknum != BTREE_METAPAGE)
+       if (P_ISMETA(opaque) && blocknum != BTREE_METAPAGE)
                ereport(ERROR,
                                (errcode(ERRCODE_INDEX_CORRUPTED),
                                 errmsg("invalid meta page found at block %u in index \"%s\"",
@@ -1206,7 +1206,7 @@ palloc_btree_page(BtreeCheckState *state, BlockNumber blocknum)
        {
                BTMetaPageData *metad = BTPageGetMeta(page);
 
-               if (!(opaque->btpo_flags & BTP_META) ||
+               if (!P_ISMETA(opaque) ||
                        metad->btm_magic != BTREE_MAGIC)
                        ereport(ERROR,
                                        (errcode(ERRCODE_INDEX_CORRUPTED),
index 7a91cc3468f12e3e42f039ede57019b569135f0e..7ca1bb24d2f3ee1e19b4175cf29781c03c8f4694 100644 (file)
@@ -416,7 +416,7 @@ pgstat_btree_page(pgstattuple_type *stat, Relation rel, BlockNumber blkno,
                BTPageOpaque opaque;
 
                opaque = (BTPageOpaque) PageGetSpecialPointer(page);
-               if (opaque->btpo_flags & (BTP_DELETED | BTP_HALF_DEAD))
+               if (P_IGNORE(opaque))
                {
                        /* recyclable page */
                        stat->free_space += BLCKSZ;
index 5c817b6510523342d0904db6a6b221e8a8ce8fcb..10697e9e23bfb571934e10e5174d058bf023a838 100644 (file)
@@ -162,7 +162,7 @@ _bt_getroot(Relation rel, int access)
        metad = BTPageGetMeta(metapg);
 
        /* sanity-check the metapage */
-       if (!(metaopaque->btpo_flags & BTP_META) ||
+       if (!P_ISMETA(metaopaque) ||
                metad->btm_magic != BTREE_MAGIC)
                ereport(ERROR,
                                (errcode(ERRCODE_INDEX_CORRUPTED),
@@ -365,7 +365,7 @@ _bt_gettrueroot(Relation rel)
        metaopaque = (BTPageOpaque) PageGetSpecialPointer(metapg);
        metad = BTPageGetMeta(metapg);
 
-       if (!(metaopaque->btpo_flags & BTP_META) ||
+       if (!P_ISMETA(metaopaque) ||
                metad->btm_magic != BTREE_MAGIC)
                ereport(ERROR,
                                (errcode(ERRCODE_INDEX_CORRUPTED),
@@ -452,7 +452,7 @@ _bt_getrootheight(Relation rel)
                metad = BTPageGetMeta(metapg);
 
                /* sanity-check the metapage */
-               if (!(metaopaque->btpo_flags & BTP_META) ||
+               if (!P_ISMETA(metaopaque) ||
                        metad->btm_magic != BTREE_MAGIC)
                        ereport(ERROR,
                                        (errcode(ERRCODE_INDEX_CORRUPTED),
index 3610c7c7e0f5521fe4df95cb304ce5ff7cedf7cd..4afdf4736f01b9b21326b0289de5bce2e63414e2 100644 (file)
@@ -135,7 +135,7 @@ _bt_clear_incomplete_split(XLogReaderState *record, uint8 block_id)
                Page            page = (Page) BufferGetPage(buf);
                BTPageOpaque pageop = (BTPageOpaque) PageGetSpecialPointer(page);
 
-               Assert((pageop->btpo_flags & BTP_INCOMPLETE_SPLIT) != 0);
+               Assert(P_INCOMPLETE_SPLIT(pageop));
                pageop->btpo_flags &= ~BTP_INCOMPLETE_SPLIT;
 
                PageSetLSN(page, lsn);
@@ -598,7 +598,7 @@ btree_xlog_delete_get_latestRemovedXid(XLogReaderState *record)
                        UnlockReleaseBuffer(ibuffer);
                        return InvalidTransactionId;
                }
-               LockBuffer(hbuffer, BUFFER_LOCK_SHARE);
+               LockBuffer(hbuffer, BT_READ);
                hpage = (Page) BufferGetPage(hbuffer);
 
                /*
index e6abbec280d9da5ea7a4a0bce761e66407781fe9..2d4c36d0b8976f2ecca33c4ebbe294441240853b 100644 (file)
@@ -173,14 +173,14 @@ typedef struct BTMetaPageData
  */
 #define P_LEFTMOST(opaque)             ((opaque)->btpo_prev == P_NONE)
 #define P_RIGHTMOST(opaque)            ((opaque)->btpo_next == P_NONE)
-#define P_ISLEAF(opaque)               ((opaque)->btpo_flags & BTP_LEAF)
-#define P_ISROOT(opaque)               ((opaque)->btpo_flags & BTP_ROOT)
-#define P_ISDELETED(opaque)            ((opaque)->btpo_flags & BTP_DELETED)
-#define P_ISMETA(opaque)               ((opaque)->btpo_flags & BTP_META)
-#define P_ISHALFDEAD(opaque)   ((opaque)->btpo_flags & BTP_HALF_DEAD)
-#define P_IGNORE(opaque)               ((opaque)->btpo_flags & (BTP_DELETED|BTP_HALF_DEAD))
-#define P_HAS_GARBAGE(opaque)  ((opaque)->btpo_flags & BTP_HAS_GARBAGE)
-#define P_INCOMPLETE_SPLIT(opaque)     ((opaque)->btpo_flags & BTP_INCOMPLETE_SPLIT)
+#define P_ISLEAF(opaque)               (((opaque)->btpo_flags & BTP_LEAF) != 0)
+#define P_ISROOT(opaque)               (((opaque)->btpo_flags & BTP_ROOT) != 0)
+#define P_ISDELETED(opaque)            (((opaque)->btpo_flags & BTP_DELETED) != 0)
+#define P_ISMETA(opaque)               (((opaque)->btpo_flags & BTP_META) != 0)
+#define P_ISHALFDEAD(opaque)   (((opaque)->btpo_flags & BTP_HALF_DEAD) != 0)
+#define P_IGNORE(opaque)               (((opaque)->btpo_flags & (BTP_DELETED|BTP_HALF_DEAD)) != 0)
+#define P_HAS_GARBAGE(opaque)  (((opaque)->btpo_flags & BTP_HAS_GARBAGE) != 0)
+#define P_INCOMPLETE_SPLIT(opaque)     (((opaque)->btpo_flags & BTP_INCOMPLETE_SPLIT) != 0)
 
 /*
  *     Lehman and Yao's algorithm requires a ``high key'' on every non-rightmost