mirror of
https://github.com/postgres/postgres.git
synced 2025-11-06 07:49:08 +03:00
Add macros in hash and btree AMs to get the special area of their pages
This makes the code more consistent with SpGiST, GiST and GIN, that already use this style, and the idea is to make easier the introduction of more sanity checks for each of these AM-specific macros. BRIN uses a different set of macros to get a page's type and flags, so it has no need for something similar. Author: Matthias van de Meent Discussion: https://postgr.es/m/CAEze2WjE3+tGO9Fs9+iZMU+z6mMZKo54W1Zt98WKqbEUHbHOBg@mail.gmail.com
This commit is contained in:
@@ -515,7 +515,7 @@ loop_top:
|
||||
_hash_checkpage(rel, buf, LH_BUCKET_PAGE);
|
||||
|
||||
page = BufferGetPage(buf);
|
||||
bucket_opaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
bucket_opaque = HashPageGetOpaque(page);
|
||||
|
||||
/*
|
||||
* If the bucket contains tuples that are moved by split, then we need
|
||||
@@ -717,7 +717,7 @@ hashbucketcleanup(Relation rel, Bucket cur_bucket, Buffer bucket_buf,
|
||||
vacuum_delay_point();
|
||||
|
||||
page = BufferGetPage(buf);
|
||||
opaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = HashPageGetOpaque(page);
|
||||
|
||||
/* Scan each tuple in page */
|
||||
maxoffno = PageGetMaxOffsetNumber(page);
|
||||
@@ -884,7 +884,7 @@ hashbucketcleanup(Relation rel, Bucket cur_bucket, Buffer bucket_buf,
|
||||
Page page;
|
||||
|
||||
page = BufferGetPage(bucket_buf);
|
||||
bucket_opaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
bucket_opaque = HashPageGetOpaque(page);
|
||||
|
||||
/* No ereport(ERROR) until changes are logged */
|
||||
START_CRIT_SECTION();
|
||||
|
||||
@@ -203,7 +203,7 @@ hash_xlog_add_ovfl_page(XLogReaderState *record)
|
||||
true);
|
||||
/* update backlink */
|
||||
ovflpage = BufferGetPage(ovflbuf);
|
||||
ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage);
|
||||
ovflopaque = HashPageGetOpaque(ovflpage);
|
||||
ovflopaque->hasho_prevblkno = leftblk;
|
||||
|
||||
PageSetLSN(ovflpage, lsn);
|
||||
@@ -215,7 +215,7 @@ hash_xlog_add_ovfl_page(XLogReaderState *record)
|
||||
HashPageOpaque leftopaque;
|
||||
|
||||
leftpage = BufferGetPage(leftbuf);
|
||||
leftopaque = (HashPageOpaque) PageGetSpecialPointer(leftpage);
|
||||
leftopaque = HashPageGetOpaque(leftpage);
|
||||
leftopaque->hasho_nextblkno = rightblk;
|
||||
|
||||
PageSetLSN(leftpage, lsn);
|
||||
@@ -342,7 +342,7 @@ hash_xlog_split_allocate_page(XLogReaderState *record)
|
||||
HashPageOpaque oldopaque;
|
||||
|
||||
oldpage = BufferGetPage(oldbuf);
|
||||
oldopaque = (HashPageOpaque) PageGetSpecialPointer(oldpage);
|
||||
oldopaque = HashPageGetOpaque(oldpage);
|
||||
|
||||
oldopaque->hasho_flag = xlrec->old_bucket_flag;
|
||||
oldopaque->hasho_prevblkno = xlrec->new_bucket;
|
||||
@@ -465,7 +465,7 @@ hash_xlog_split_complete(XLogReaderState *record)
|
||||
HashPageOpaque oldopaque;
|
||||
|
||||
oldpage = BufferGetPage(oldbuf);
|
||||
oldopaque = (HashPageOpaque) PageGetSpecialPointer(oldpage);
|
||||
oldopaque = HashPageGetOpaque(oldpage);
|
||||
|
||||
oldopaque->hasho_flag = xlrec->old_bucket_flag;
|
||||
|
||||
@@ -488,7 +488,7 @@ hash_xlog_split_complete(XLogReaderState *record)
|
||||
HashPageOpaque nopaque;
|
||||
|
||||
newpage = BufferGetPage(newbuf);
|
||||
nopaque = (HashPageOpaque) PageGetSpecialPointer(newpage);
|
||||
nopaque = HashPageGetOpaque(newpage);
|
||||
|
||||
nopaque->hasho_flag = xlrec->new_bucket_flag;
|
||||
|
||||
@@ -710,7 +710,7 @@ hash_xlog_squeeze_page(XLogReaderState *record)
|
||||
*/
|
||||
if (xldata->is_prev_bucket_same_wrt)
|
||||
{
|
||||
HashPageOpaque writeopaque = (HashPageOpaque) PageGetSpecialPointer(writepage);
|
||||
HashPageOpaque writeopaque = HashPageGetOpaque(writepage);
|
||||
|
||||
writeopaque->hasho_nextblkno = xldata->nextblkno;
|
||||
}
|
||||
@@ -729,7 +729,7 @@ hash_xlog_squeeze_page(XLogReaderState *record)
|
||||
|
||||
_hash_pageinit(ovflpage, BufferGetPageSize(ovflbuf));
|
||||
|
||||
ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage);
|
||||
ovflopaque = HashPageGetOpaque(ovflpage);
|
||||
|
||||
ovflopaque->hasho_prevblkno = InvalidBlockNumber;
|
||||
ovflopaque->hasho_nextblkno = InvalidBlockNumber;
|
||||
@@ -748,7 +748,7 @@ hash_xlog_squeeze_page(XLogReaderState *record)
|
||||
XLogReadBufferForRedo(record, 3, &prevbuf) == BLK_NEEDS_REDO)
|
||||
{
|
||||
Page prevpage = BufferGetPage(prevbuf);
|
||||
HashPageOpaque prevopaque = (HashPageOpaque) PageGetSpecialPointer(prevpage);
|
||||
HashPageOpaque prevopaque = HashPageGetOpaque(prevpage);
|
||||
|
||||
prevopaque->hasho_nextblkno = xldata->nextblkno;
|
||||
|
||||
@@ -766,7 +766,7 @@ hash_xlog_squeeze_page(XLogReaderState *record)
|
||||
if (XLogReadBufferForRedo(record, 4, &nextbuf) == BLK_NEEDS_REDO)
|
||||
{
|
||||
Page nextpage = BufferGetPage(nextbuf);
|
||||
HashPageOpaque nextopaque = (HashPageOpaque) PageGetSpecialPointer(nextpage);
|
||||
HashPageOpaque nextopaque = HashPageGetOpaque(nextpage);
|
||||
|
||||
nextopaque->hasho_prevblkno = xldata->prevblkno;
|
||||
|
||||
@@ -903,7 +903,7 @@ hash_xlog_delete(XLogReaderState *record)
|
||||
{
|
||||
HashPageOpaque pageopaque;
|
||||
|
||||
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
pageopaque = HashPageGetOpaque(page);
|
||||
pageopaque->hasho_flag &= ~LH_PAGE_HAS_DEAD_TUPLES;
|
||||
}
|
||||
|
||||
@@ -933,7 +933,7 @@ hash_xlog_split_cleanup(XLogReaderState *record)
|
||||
|
||||
page = (Page) BufferGetPage(buffer);
|
||||
|
||||
bucket_opaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
bucket_opaque = HashPageGetOpaque(page);
|
||||
bucket_opaque->hasho_flag &= ~LH_BUCKET_NEEDS_SPLIT_CLEANUP;
|
||||
PageSetLSN(page, lsn);
|
||||
MarkBufferDirty(buffer);
|
||||
@@ -1024,7 +1024,7 @@ hash_xlog_vacuum_one_page(XLogReaderState *record)
|
||||
* Mark the page as not containing any LP_DEAD items. See comments in
|
||||
* _hash_vacuum_one_page() for details.
|
||||
*/
|
||||
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
pageopaque = HashPageGetOpaque(page);
|
||||
pageopaque->hasho_flag &= ~LH_PAGE_HAS_DEAD_TUPLES;
|
||||
|
||||
PageSetLSN(page, lsn);
|
||||
@@ -1116,7 +1116,7 @@ hash_mask(char *pagedata, BlockNumber blkno)
|
||||
mask_page_hint_bits(page);
|
||||
mask_unused_space(page);
|
||||
|
||||
opaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = HashPageGetOpaque(page);
|
||||
|
||||
pagetype = opaque->hasho_flag & LH_PAGE_TYPE;
|
||||
if (pagetype == LH_UNUSED_PAGE)
|
||||
|
||||
@@ -95,7 +95,7 @@ restart_insert:
|
||||
bucket_buf = buf;
|
||||
|
||||
page = BufferGetPage(buf);
|
||||
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
pageopaque = HashPageGetOpaque(page);
|
||||
bucket = pageopaque->hasho_bucket;
|
||||
|
||||
/*
|
||||
@@ -183,7 +183,7 @@ restart_insert:
|
||||
/* should fit now, given test above */
|
||||
Assert(PageGetFreeSpace(page) >= itemsz);
|
||||
}
|
||||
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
pageopaque = HashPageGetOpaque(page);
|
||||
Assert((pageopaque->hasho_flag & LH_PAGE_TYPE) == LH_OVERFLOW_PAGE);
|
||||
Assert(pageopaque->hasho_bucket == bucket);
|
||||
}
|
||||
@@ -384,7 +384,7 @@ _hash_vacuum_one_page(Relation rel, Relation hrel, Buffer metabuf, Buffer buf)
|
||||
* check it. Remember that LH_PAGE_HAS_DEAD_TUPLES is only a hint
|
||||
* anyway.
|
||||
*/
|
||||
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
pageopaque = HashPageGetOpaque(page);
|
||||
pageopaque->hasho_flag &= ~LH_PAGE_HAS_DEAD_TUPLES;
|
||||
|
||||
metap = HashPageGetMeta(BufferGetPage(metabuf));
|
||||
|
||||
@@ -159,7 +159,7 @@ _hash_addovflpage(Relation rel, Buffer metabuf, Buffer buf, bool retain_pin)
|
||||
BlockNumber nextblkno;
|
||||
|
||||
page = BufferGetPage(buf);
|
||||
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
pageopaque = HashPageGetOpaque(page);
|
||||
nextblkno = pageopaque->hasho_nextblkno;
|
||||
|
||||
if (!BlockNumberIsValid(nextblkno))
|
||||
@@ -364,7 +364,7 @@ found:
|
||||
|
||||
/* initialize new overflow page */
|
||||
ovflpage = BufferGetPage(ovflbuf);
|
||||
ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage);
|
||||
ovflopaque = HashPageGetOpaque(ovflpage);
|
||||
ovflopaque->hasho_prevblkno = BufferGetBlockNumber(buf);
|
||||
ovflopaque->hasho_nextblkno = InvalidBlockNumber;
|
||||
ovflopaque->hasho_bucket = pageopaque->hasho_bucket;
|
||||
@@ -516,7 +516,7 @@ _hash_freeovflpage(Relation rel, Buffer bucketbuf, Buffer ovflbuf,
|
||||
_hash_checkpage(rel, ovflbuf, LH_OVERFLOW_PAGE);
|
||||
ovflblkno = BufferGetBlockNumber(ovflbuf);
|
||||
ovflpage = BufferGetPage(ovflbuf);
|
||||
ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage);
|
||||
ovflopaque = HashPageGetOpaque(ovflpage);
|
||||
nextblkno = ovflopaque->hasho_nextblkno;
|
||||
prevblkno = ovflopaque->hasho_prevblkno;
|
||||
writeblkno = BufferGetBlockNumber(wbuf);
|
||||
@@ -600,7 +600,7 @@ _hash_freeovflpage(Relation rel, Buffer bucketbuf, Buffer ovflbuf,
|
||||
*/
|
||||
_hash_pageinit(ovflpage, BufferGetPageSize(ovflbuf));
|
||||
|
||||
ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage);
|
||||
ovflopaque = HashPageGetOpaque(ovflpage);
|
||||
|
||||
ovflopaque->hasho_prevblkno = InvalidBlockNumber;
|
||||
ovflopaque->hasho_nextblkno = InvalidBlockNumber;
|
||||
@@ -613,7 +613,7 @@ _hash_freeovflpage(Relation rel, Buffer bucketbuf, Buffer ovflbuf,
|
||||
if (BufferIsValid(prevbuf))
|
||||
{
|
||||
Page prevpage = BufferGetPage(prevbuf);
|
||||
HashPageOpaque prevopaque = (HashPageOpaque) PageGetSpecialPointer(prevpage);
|
||||
HashPageOpaque prevopaque = HashPageGetOpaque(prevpage);
|
||||
|
||||
Assert(prevopaque->hasho_bucket == bucket);
|
||||
prevopaque->hasho_nextblkno = nextblkno;
|
||||
@@ -622,7 +622,7 @@ _hash_freeovflpage(Relation rel, Buffer bucketbuf, Buffer ovflbuf,
|
||||
if (BufferIsValid(nextbuf))
|
||||
{
|
||||
Page nextpage = BufferGetPage(nextbuf);
|
||||
HashPageOpaque nextopaque = (HashPageOpaque) PageGetSpecialPointer(nextpage);
|
||||
HashPageOpaque nextopaque = HashPageGetOpaque(nextpage);
|
||||
|
||||
Assert(nextopaque->hasho_bucket == bucket);
|
||||
nextopaque->hasho_prevblkno = prevblkno;
|
||||
@@ -751,7 +751,7 @@ _hash_initbitmapbuffer(Buffer buf, uint16 bmsize, bool initpage)
|
||||
_hash_pageinit(pg, BufferGetPageSize(buf));
|
||||
|
||||
/* initialize the page's special space */
|
||||
op = (HashPageOpaque) PageGetSpecialPointer(pg);
|
||||
op = HashPageGetOpaque(pg);
|
||||
op->hasho_prevblkno = InvalidBlockNumber;
|
||||
op->hasho_nextblkno = InvalidBlockNumber;
|
||||
op->hasho_bucket = InvalidBucket;
|
||||
@@ -824,7 +824,7 @@ _hash_squeezebucket(Relation rel,
|
||||
wblkno = bucket_blkno;
|
||||
wbuf = bucket_buf;
|
||||
wpage = BufferGetPage(wbuf);
|
||||
wopaque = (HashPageOpaque) PageGetSpecialPointer(wpage);
|
||||
wopaque = HashPageGetOpaque(wpage);
|
||||
|
||||
/*
|
||||
* if there aren't any overflow pages, there's nothing to squeeze. caller
|
||||
@@ -855,7 +855,7 @@ _hash_squeezebucket(Relation rel,
|
||||
LH_OVERFLOW_PAGE,
|
||||
bstrategy);
|
||||
rpage = BufferGetPage(rbuf);
|
||||
ropaque = (HashPageOpaque) PageGetSpecialPointer(rpage);
|
||||
ropaque = HashPageGetOpaque(rpage);
|
||||
Assert(ropaque->hasho_bucket == bucket);
|
||||
} while (BlockNumberIsValid(ropaque->hasho_nextblkno));
|
||||
|
||||
@@ -1005,7 +1005,7 @@ readpage:
|
||||
|
||||
wbuf = next_wbuf;
|
||||
wpage = BufferGetPage(wbuf);
|
||||
wopaque = (HashPageOpaque) PageGetSpecialPointer(wpage);
|
||||
wopaque = HashPageGetOpaque(wpage);
|
||||
Assert(wopaque->hasho_bucket == bucket);
|
||||
retain_pin = false;
|
||||
|
||||
@@ -1076,7 +1076,7 @@ readpage:
|
||||
LH_OVERFLOW_PAGE,
|
||||
bstrategy);
|
||||
rpage = BufferGetPage(rbuf);
|
||||
ropaque = (HashPageOpaque) PageGetSpecialPointer(rpage);
|
||||
ropaque = HashPageGetOpaque(rpage);
|
||||
Assert(ropaque->hasho_bucket == bucket);
|
||||
}
|
||||
|
||||
|
||||
@@ -166,7 +166,7 @@ _hash_initbuf(Buffer buf, uint32 max_bucket, uint32 num_bucket, uint32 flag,
|
||||
if (initpage)
|
||||
_hash_pageinit(page, BufferGetPageSize(buf));
|
||||
|
||||
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
pageopaque = HashPageGetOpaque(page);
|
||||
|
||||
/*
|
||||
* Set hasho_prevblkno with current hashm_maxbucket. This value will be
|
||||
@@ -529,7 +529,7 @@ _hash_init_metabuffer(Buffer buf, double num_tuples, RegProcedure procid,
|
||||
if (initpage)
|
||||
_hash_pageinit(page, BufferGetPageSize(buf));
|
||||
|
||||
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
pageopaque = HashPageGetOpaque(page);
|
||||
pageopaque->hasho_prevblkno = InvalidBlockNumber;
|
||||
pageopaque->hasho_nextblkno = InvalidBlockNumber;
|
||||
pageopaque->hasho_bucket = InvalidBucket;
|
||||
@@ -693,7 +693,7 @@ restart_expand:
|
||||
goto fail;
|
||||
|
||||
opage = BufferGetPage(buf_oblkno);
|
||||
oopaque = (HashPageOpaque) PageGetSpecialPointer(opage);
|
||||
oopaque = HashPageGetOpaque(opage);
|
||||
|
||||
/*
|
||||
* We want to finish the split from a bucket as there is no apparent
|
||||
@@ -864,7 +864,7 @@ restart_expand:
|
||||
lowmask = metap->hashm_lowmask;
|
||||
|
||||
opage = BufferGetPage(buf_oblkno);
|
||||
oopaque = (HashPageOpaque) PageGetSpecialPointer(opage);
|
||||
oopaque = HashPageGetOpaque(opage);
|
||||
|
||||
/*
|
||||
* Mark the old bucket to indicate that split is in progress. (At
|
||||
@@ -883,7 +883,7 @@ restart_expand:
|
||||
* initialize the new bucket's primary page and mark it to indicate that
|
||||
* split is in progress.
|
||||
*/
|
||||
nopaque = (HashPageOpaque) PageGetSpecialPointer(npage);
|
||||
nopaque = HashPageGetOpaque(npage);
|
||||
nopaque->hasho_prevblkno = maxbucket;
|
||||
nopaque->hasho_nextblkno = InvalidBlockNumber;
|
||||
nopaque->hasho_bucket = new_bucket;
|
||||
@@ -1010,7 +1010,7 @@ _hash_alloc_buckets(Relation rel, BlockNumber firstblock, uint32 nblocks)
|
||||
*/
|
||||
_hash_pageinit(page, BLCKSZ);
|
||||
|
||||
ovflopaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
ovflopaque = HashPageGetOpaque(page);
|
||||
|
||||
ovflopaque->hasho_prevblkno = InvalidBlockNumber;
|
||||
ovflopaque->hasho_nextblkno = InvalidBlockNumber;
|
||||
@@ -1091,11 +1091,11 @@ _hash_splitbucket(Relation rel,
|
||||
|
||||
bucket_obuf = obuf;
|
||||
opage = BufferGetPage(obuf);
|
||||
oopaque = (HashPageOpaque) PageGetSpecialPointer(opage);
|
||||
oopaque = HashPageGetOpaque(opage);
|
||||
|
||||
bucket_nbuf = nbuf;
|
||||
npage = BufferGetPage(nbuf);
|
||||
nopaque = (HashPageOpaque) PageGetSpecialPointer(npage);
|
||||
nopaque = HashPageGetOpaque(npage);
|
||||
|
||||
/* Copy the predicate locks from old bucket to new bucket. */
|
||||
PredicateLockPageSplit(rel,
|
||||
@@ -1198,7 +1198,7 @@ _hash_splitbucket(Relation rel,
|
||||
/* chain to a new overflow page */
|
||||
nbuf = _hash_addovflpage(rel, metabuf, nbuf, (nbuf == bucket_nbuf));
|
||||
npage = BufferGetPage(nbuf);
|
||||
nopaque = (HashPageOpaque) PageGetSpecialPointer(npage);
|
||||
nopaque = HashPageGetOpaque(npage);
|
||||
}
|
||||
|
||||
itups[nitups++] = new_itup;
|
||||
@@ -1251,7 +1251,7 @@ _hash_splitbucket(Relation rel,
|
||||
/* Else, advance to next old page */
|
||||
obuf = _hash_getbuf(rel, oblkno, HASH_READ, LH_OVERFLOW_PAGE);
|
||||
opage = BufferGetPage(obuf);
|
||||
oopaque = (HashPageOpaque) PageGetSpecialPointer(opage);
|
||||
oopaque = HashPageGetOpaque(opage);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1264,11 +1264,11 @@ _hash_splitbucket(Relation rel,
|
||||
*/
|
||||
LockBuffer(bucket_obuf, BUFFER_LOCK_EXCLUSIVE);
|
||||
opage = BufferGetPage(bucket_obuf);
|
||||
oopaque = (HashPageOpaque) PageGetSpecialPointer(opage);
|
||||
oopaque = HashPageGetOpaque(opage);
|
||||
|
||||
LockBuffer(bucket_nbuf, BUFFER_LOCK_EXCLUSIVE);
|
||||
npage = BufferGetPage(bucket_nbuf);
|
||||
nopaque = (HashPageOpaque) PageGetSpecialPointer(npage);
|
||||
nopaque = HashPageGetOpaque(npage);
|
||||
|
||||
START_CRIT_SECTION();
|
||||
|
||||
@@ -1392,7 +1392,7 @@ _hash_finish_split(Relation rel, Buffer metabuf, Buffer obuf, Bucket obucket,
|
||||
bucket_nbuf = nbuf;
|
||||
|
||||
npage = BufferGetPage(nbuf);
|
||||
npageopaque = (HashPageOpaque) PageGetSpecialPointer(npage);
|
||||
npageopaque = HashPageGetOpaque(npage);
|
||||
|
||||
/* Scan each tuple in new page */
|
||||
nmaxoffnum = PageGetMaxOffsetNumber(npage);
|
||||
@@ -1446,7 +1446,7 @@ _hash_finish_split(Relation rel, Buffer metabuf, Buffer obuf, Bucket obucket,
|
||||
}
|
||||
|
||||
npage = BufferGetPage(bucket_nbuf);
|
||||
npageopaque = (HashPageOpaque) PageGetSpecialPointer(npage);
|
||||
npageopaque = HashPageGetOpaque(npage);
|
||||
nbucket = npageopaque->hasho_bucket;
|
||||
|
||||
_hash_splitbucket(rel, metabuf, obucket,
|
||||
@@ -1587,7 +1587,7 @@ _hash_getbucketbuf_from_hashkey(Relation rel, uint32 hashkey, int access,
|
||||
/* Fetch the primary bucket page for the bucket */
|
||||
buf = _hash_getbuf(rel, blkno, access, LH_BUCKET_PAGE);
|
||||
page = BufferGetPage(buf);
|
||||
opaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = HashPageGetOpaque(page);
|
||||
Assert(opaque->hasho_bucket == bucket);
|
||||
Assert(opaque->hasho_prevblkno != InvalidBlockNumber);
|
||||
|
||||
|
||||
@@ -187,7 +187,7 @@ _hash_readnext(IndexScanDesc scan,
|
||||
{
|
||||
*pagep = BufferGetPage(*bufp);
|
||||
TestForOldSnapshot(scan->xs_snapshot, rel, *pagep);
|
||||
*opaquep = (HashPageOpaque) PageGetSpecialPointer(*pagep);
|
||||
*opaquep = HashPageGetOpaque(*pagep);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -233,7 +233,7 @@ _hash_readprev(IndexScanDesc scan,
|
||||
LH_BUCKET_PAGE | LH_OVERFLOW_PAGE);
|
||||
*pagep = BufferGetPage(*bufp);
|
||||
TestForOldSnapshot(scan->xs_snapshot, rel, *pagep);
|
||||
*opaquep = (HashPageOpaque) PageGetSpecialPointer(*pagep);
|
||||
*opaquep = HashPageGetOpaque(*pagep);
|
||||
|
||||
/*
|
||||
* We always maintain the pin on bucket page for whole scan operation,
|
||||
@@ -258,7 +258,7 @@ _hash_readprev(IndexScanDesc scan,
|
||||
|
||||
LockBuffer(*bufp, BUFFER_LOCK_SHARE);
|
||||
*pagep = BufferGetPage(*bufp);
|
||||
*opaquep = (HashPageOpaque) PageGetSpecialPointer(*pagep);
|
||||
*opaquep = HashPageGetOpaque(*pagep);
|
||||
|
||||
/* move to the end of bucket chain */
|
||||
while (BlockNumberIsValid((*opaquep)->hasho_nextblkno))
|
||||
@@ -352,7 +352,7 @@ _hash_first(IndexScanDesc scan, ScanDirection dir)
|
||||
PredicateLockPage(rel, BufferGetBlockNumber(buf), scan->xs_snapshot);
|
||||
page = BufferGetPage(buf);
|
||||
TestForOldSnapshot(scan->xs_snapshot, rel, page);
|
||||
opaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = HashPageGetOpaque(page);
|
||||
bucket = opaque->hasho_bucket;
|
||||
|
||||
so->hashso_bucket_buf = buf;
|
||||
@@ -398,7 +398,7 @@ _hash_first(IndexScanDesc scan, ScanDirection dir)
|
||||
|
||||
LockBuffer(buf, BUFFER_LOCK_SHARE);
|
||||
page = BufferGetPage(buf);
|
||||
opaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = HashPageGetOpaque(page);
|
||||
Assert(opaque->hasho_bucket == bucket);
|
||||
|
||||
if (H_BUCKET_BEING_POPULATED(opaque))
|
||||
@@ -463,7 +463,7 @@ _hash_readpage(IndexScanDesc scan, Buffer *bufP, ScanDirection dir)
|
||||
Assert(BufferIsValid(buf));
|
||||
_hash_checkpage(rel, buf, LH_BUCKET_PAGE | LH_OVERFLOW_PAGE);
|
||||
page = BufferGetPage(buf);
|
||||
opaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = HashPageGetOpaque(page);
|
||||
|
||||
so->currPos.buf = buf;
|
||||
so->currPos.currPage = BufferGetBlockNumber(buf);
|
||||
|
||||
@@ -239,7 +239,7 @@ _hash_checkpage(Relation rel, Buffer buf, int flags)
|
||||
|
||||
if (flags)
|
||||
{
|
||||
HashPageOpaque opaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
HashPageOpaque opaque = HashPageGetOpaque(page);
|
||||
|
||||
if ((opaque->hasho_flag & flags) == 0)
|
||||
ereport(ERROR,
|
||||
@@ -574,7 +574,7 @@ _hash_kill_items(IndexScanDesc scan)
|
||||
buf = _hash_getbuf(rel, blkno, HASH_READ, LH_OVERFLOW_PAGE);
|
||||
|
||||
page = BufferGetPage(buf);
|
||||
opaque = (HashPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = HashPageGetOpaque(page);
|
||||
maxoff = PageGetMaxOffsetNumber(page);
|
||||
|
||||
for (i = 0; i < numKilled; i++)
|
||||
|
||||
Reference in New Issue
Block a user