diff options
Diffstat (limited to 'src/backend/access')
-rw-r--r-- | src/backend/access/gin/ginget.c | 29 | ||||
-rw-r--r-- | src/backend/access/gin/ginpostinglist.c | 14 |
2 files changed, 22 insertions, 21 deletions
diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c index 87cd9eaa9f5..610d386ff8a 100644 --- a/src/backend/access/gin/ginget.c +++ b/src/backend/access/gin/ginget.c @@ -626,8 +626,9 @@ entryLoadMoreItems(GinState *ginstate, GinScanEntry entry, } else { - entry->btree.itemptr = advancePast; - entry->btree.itemptr.ip_posid++; + ItemPointerSet(&entry->btree.itemptr, + GinItemPointerGetBlockNumber(&advancePast), + OffsetNumberNext(GinItemPointerGetOffsetNumber(&advancePast))); } entry->btree.fullScan = false; stack = ginFindLeafPage(&entry->btree, true, snapshot); @@ -979,15 +980,17 @@ keyGetItem(GinState *ginstate, MemoryContext tempCtx, GinScanKey key, if (GinItemPointerGetBlockNumber(&advancePast) < GinItemPointerGetBlockNumber(&minItem)) { - advancePast.ip_blkid = minItem.ip_blkid; - advancePast.ip_posid = 0; + ItemPointerSet(&advancePast, + GinItemPointerGetBlockNumber(&minItem), + InvalidOffsetNumber); } } else { - Assert(minItem.ip_posid > 0); - advancePast = minItem; - advancePast.ip_posid--; + Assert(GinItemPointerGetOffsetNumber(&minItem) > 0); + ItemPointerSet(&advancePast, + GinItemPointerGetBlockNumber(&minItem), + OffsetNumberPrev(GinItemPointerGetOffsetNumber(&minItem))); } /* @@ -1245,15 +1248,17 @@ scanGetItem(IndexScanDesc scan, ItemPointerData advancePast, if (GinItemPointerGetBlockNumber(&advancePast) < GinItemPointerGetBlockNumber(&key->curItem)) { - advancePast.ip_blkid = key->curItem.ip_blkid; - advancePast.ip_posid = 0; + ItemPointerSet(&advancePast, + GinItemPointerGetBlockNumber(&key->curItem), + InvalidOffsetNumber); } } else { - Assert(key->curItem.ip_posid > 0); - advancePast = key->curItem; - advancePast.ip_posid--; + Assert(GinItemPointerGetOffsetNumber(&key->curItem) > 0); + ItemPointerSet(&advancePast, + GinItemPointerGetBlockNumber(&key->curItem), + OffsetNumberPrev(GinItemPointerGetOffsetNumber(&key->curItem))); } /* diff --git a/src/backend/access/gin/ginpostinglist.c b/src/backend/access/gin/ginpostinglist.c index 598069d06ff..8d2d31ac723 100644 --- a/src/backend/access/gin/ginpostinglist.c +++ b/src/backend/access/gin/ginpostinglist.c @@ -79,13 +79,11 @@ itemptr_to_uint64(const ItemPointer iptr) uint64 val; Assert(ItemPointerIsValid(iptr)); - Assert(iptr->ip_posid < (1 << MaxHeapTuplesPerPageBits)); + Assert(GinItemPointerGetOffsetNumber(iptr) < (1 << MaxHeapTuplesPerPageBits)); - val = iptr->ip_blkid.bi_hi; - val <<= 16; - val |= iptr->ip_blkid.bi_lo; + val = GinItemPointerGetBlockNumber(iptr); val <<= MaxHeapTuplesPerPageBits; - val |= iptr->ip_posid; + val |= GinItemPointerGetOffsetNumber(iptr); return val; } @@ -93,11 +91,9 @@ itemptr_to_uint64(const ItemPointer iptr) static inline void uint64_to_itemptr(uint64 val, ItemPointer iptr) { - iptr->ip_posid = val & ((1 << MaxHeapTuplesPerPageBits) - 1); + GinItemPointerSetOffsetNumber(iptr, val & ((1 << MaxHeapTuplesPerPageBits) - 1)); val = val >> MaxHeapTuplesPerPageBits; - iptr->ip_blkid.bi_lo = val & 0xFFFF; - val = val >> 16; - iptr->ip_blkid.bi_hi = val & 0xFFFF; + GinItemPointerSetBlockNumber(iptr, val); Assert(ItemPointerIsValid(iptr)); } |