diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2017-03-28 12:52:55 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2017-03-28 19:02:23 -0300 |
commit | ce96ce60ca2293f75f36c3661e4657a3c79ffd61 (patch) | |
tree | 45247e9dd84a19acd6a2d024ddcc95007e12a577 /src/include | |
parent | a99f77021f0c8c1c221af4e36b64ca43abd04389 (diff) | |
download | postgresql-ce96ce60ca2293f75f36c3661e4657a3c79ffd61.tar.gz postgresql-ce96ce60ca2293f75f36c3661e4657a3c79ffd61.zip |
Remove direct uses of ItemPointer.{ip_blkid,ip_posid}
There are no functional changes here; this simply encapsulates knowledge
of the ItemPointerData struct so that a future patch can change things
without more breakage.
All direct users of ip_blkid and ip_posid are changed to use existing
macros ItemPointerGetBlockNumber and ItemPointerGetOffsetNumber
respectively. For callers where that's inappropriate (because they
Assert that the itempointer is is valid-looking), add
ItemPointerGetBlockNumberNoCheck and ItemPointerGetOffsetNumberNoCheck,
which lack the assertion but are otherwise identical.
Author: Pavan Deolasee
Discussion: https://postgr.es/m/CABOikdNnFon4cJiL=h1mZH3bgUeU+sWHuU4Yr8AB=j3A2p1GiA@mail.gmail.com
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/access/gin_private.h | 6 | ||||
-rw-r--r-- | src/include/access/ginblock.h | 11 | ||||
-rw-r--r-- | src/include/access/htup_details.h | 2 | ||||
-rw-r--r-- | src/include/access/nbtree.h | 5 | ||||
-rw-r--r-- | src/include/storage/itemptr.h | 26 |
5 files changed, 37 insertions, 13 deletions
diff --git a/src/include/access/gin_private.h b/src/include/access/gin_private.h index 824cc1c9d89..f2e9c4ddec8 100644 --- a/src/include/access/gin_private.h +++ b/src/include/access/gin_private.h @@ -460,8 +460,8 @@ extern ItemPointer ginMergeItemPointers(ItemPointerData *a, uint32 na, static inline int ginCompareItemPointers(ItemPointer a, ItemPointer b) { - uint64 ia = (uint64) a->ip_blkid.bi_hi << 32 | (uint64) a->ip_blkid.bi_lo << 16 | a->ip_posid; - uint64 ib = (uint64) b->ip_blkid.bi_hi << 32 | (uint64) b->ip_blkid.bi_lo << 16 | b->ip_posid; + uint64 ia = (uint64) GinItemPointerGetBlockNumber(a) << 32 | GinItemPointerGetOffsetNumber(a); + uint64 ib = (uint64) GinItemPointerGetBlockNumber(b) << 32 | GinItemPointerGetOffsetNumber(b); if (ia == ib) return 0; @@ -471,6 +471,6 @@ ginCompareItemPointers(ItemPointer a, ItemPointer b) return -1; } -extern int ginTraverseLock(Buffer buffer, bool searchMode); +extern int ginTraverseLock(Buffer buffer, bool searchMode); #endif /* GIN_PRIVATE_H */ diff --git a/src/include/access/ginblock.h b/src/include/access/ginblock.h index a3fb0560ddf..438912c6a0d 100644 --- a/src/include/access/ginblock.h +++ b/src/include/access/ginblock.h @@ -132,10 +132,17 @@ typedef struct GinMetaPageData * to avoid Asserts, since sometimes the ip_posid isn't "valid" */ #define GinItemPointerGetBlockNumber(pointer) \ - BlockIdGetBlockNumber(&(pointer)->ip_blkid) + (ItemPointerGetBlockNumberNoCheck(pointer)) #define GinItemPointerGetOffsetNumber(pointer) \ - ((pointer)->ip_posid) + (ItemPointerGetOffsetNumberNoCheck(pointer)) + +#define GinItemPointerSetBlockNumber(pointer, blkno) \ + (ItemPointerSetBlockNumber((pointer), (blkno))) + +#define GinItemPointerSetOffsetNumber(pointer, offnum) \ + (ItemPointerSetOffsetNumber((pointer), (offnum))) + /* * Special-case item pointer values needed by the GIN search logic. diff --git a/src/include/access/htup_details.h b/src/include/access/htup_details.h index a6c7e319a6e..7b6285df136 100644 --- a/src/include/access/htup_details.h +++ b/src/include/access/htup_details.h @@ -422,7 +422,7 @@ do { \ #define HeapTupleHeaderIsSpeculative(tup) \ ( \ - (tup)->t_ctid.ip_posid == SpecTokenOffsetNumber \ + (ItemPointerGetOffsetNumberNoCheck(&(tup)->t_ctid) == SpecTokenOffsetNumber) \ ) #define HeapTupleHeaderGetSpeculativeToken(tup) \ diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index 6289ffa9bd4..f9304dbe1d5 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -151,9 +151,8 @@ typedef struct BTMetaPageData * within a level). - vadim 04/09/97 */ #define BTTidSame(i1, i2) \ - ( (i1).ip_blkid.bi_hi == (i2).ip_blkid.bi_hi && \ - (i1).ip_blkid.bi_lo == (i2).ip_blkid.bi_lo && \ - (i1).ip_posid == (i2).ip_posid ) + ((ItemPointerGetBlockNumber(&(i1)) == ItemPointerGetBlockNumber(&(i2))) && \ + (ItemPointerGetOffsetNumber(&(i1)) == ItemPointerGetOffsetNumber(&(i2)))) #define BTEntrySame(i1, i2) \ BTTidSame((i1)->t_tid, (i2)->t_tid) diff --git a/src/include/storage/itemptr.h b/src/include/storage/itemptr.h index 576aaa890b8..c21d2adfcbf 100644 --- a/src/include/storage/itemptr.h +++ b/src/include/storage/itemptr.h @@ -60,23 +60,41 @@ typedef ItemPointerData *ItemPointer; ((bool) (PointerIsValid(pointer) && ((pointer)->ip_posid != 0))) /* - * ItemPointerGetBlockNumber + * ItemPointerGetBlockNumberNoCheck * Returns the block number of a disk item pointer. */ +#define ItemPointerGetBlockNumberNoCheck(pointer) \ +( \ + BlockIdGetBlockNumber(&(pointer)->ip_blkid) \ +) + +/* + * ItemPointerGetBlockNumber + * As above, but verifies that the item pointer looks valid. + */ #define ItemPointerGetBlockNumber(pointer) \ ( \ AssertMacro(ItemPointerIsValid(pointer)), \ - BlockIdGetBlockNumber(&(pointer)->ip_blkid) \ + ItemPointerGetBlockNumberNoCheck(pointer) \ ) /* - * ItemPointerGetOffsetNumber + * ItemPointerGetOffsetNumberNoCheck * Returns the offset number of a disk item pointer. */ +#define ItemPointerGetOffsetNumberNoCheck(pointer) \ +( \ + (pointer)->ip_posid \ +) + +/* + * ItemPointerGetOffsetNumber + * As above, but verifies that the item pointer looks valid. + */ #define ItemPointerGetOffsetNumber(pointer) \ ( \ AssertMacro(ItemPointerIsValid(pointer)), \ - (pointer)->ip_posid \ + ItemPointerGetOffsetNumberNoCheck(pointer) \ ) /* |