state->target = palloc_btree_page(state, state->targetblock);
state->targetlsn = PageGetLSN(state->target);
- opaque = (BTPageOpaque) PageGetSpecialPointer(state->target);
+ opaque = BTPageGetOpaque(state->target);
if (P_IGNORE(opaque))
{
LockBuffer(lbuf, BT_READ);
_bt_checkpage(state->rel, lbuf);
page = BufferGetPage(lbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
if (P_ISDELETED(opaque))
{
/*
LockBuffer(newtargetbuf, BT_READ);
_bt_checkpage(state->rel, newtargetbuf);
page = BufferGetPage(newtargetbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/* btpo_prev_from_target may have changed; update it */
btpo_prev_from_target = opaque->btpo_prev;
}
OffsetNumber max;
BTPageOpaque topaque;
- topaque = (BTPageOpaque) PageGetSpecialPointer(state->target);
+ topaque = BTPageGetOpaque(state->target);
max = PageGetMaxOffsetNumber(state->target);
elog(DEBUG2, "verifying %u items on %s block %u", max,
/* Get fresh copy of target page */
state->target = palloc_btree_page(state, state->targetblock);
/* Note that we deliberately do not update target LSN */
- topaque = (BTPageOpaque) PageGetSpecialPointer(state->target);
+ topaque = BTPageGetOpaque(state->target);
/*
* All !readonly checks now performed; just return
OffsetNumber nline;
/* Determine target's next block number */
- opaque = (BTPageOpaque) PageGetSpecialPointer(state->target);
+ opaque = BTPageGetOpaque(state->target);
/* If target is already rightmost, no right sibling; nothing to do here */
if (P_RIGHTMOST(opaque))
CHECK_FOR_INTERRUPTS();
rightpage = palloc_btree_page(state, targetnext);
- opaque = (BTPageOpaque) PageGetSpecialPointer(rightpage);
+ opaque = BTPageGetOpaque(rightpage);
if (!P_IGNORE(opaque) || P_RIGHTMOST(opaque))
break;
else
page = palloc_btree_page(state, blkno);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/* The first page we visit at the level should be leftmost */
if (first && !BlockNumberIsValid(state->prevrightlink) && !P_LEFTMOST(opaque))
else
pivotkey_offset = target_downlinkoffnum;
- topaque = (BTPageOpaque) PageGetSpecialPointer(state->target);
+ topaque = BTPageGetOpaque(state->target);
if (!offset_is_negative_infinity(topaque, pivotkey_offset))
{
* Check all items, rather than checking just the first and trusting that
* the operator class obeys the transitive law.
*/
- topaque = (BTPageOpaque) PageGetSpecialPointer(state->target);
+ topaque = BTPageGetOpaque(state->target);
child = palloc_btree_page(state, childblock);
- copaque = (BTPageOpaque) PageGetSpecialPointer(child);
+ copaque = BTPageGetOpaque(child);
maxoffset = PageGetMaxOffsetNumber(child);
/*
bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
BlockNumber blkno, Page page)
{
- BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ BTPageOpaque opaque = BTPageGetOpaque(page);
ItemId itemid;
IndexTuple itup;
Page child;
CHECK_FOR_INTERRUPTS();
child = palloc_btree_page(state, childblk);
- copaque = (BTPageOpaque) PageGetSpecialPointer(child);
+ copaque = BTPageGetOpaque(child);
if (P_ISLEAF(copaque))
break;
bool nonpivot;
ritup = (IndexTuple) PageGetItem(state->target, itemid);
- topaque = (BTPageOpaque) PageGetSpecialPointer(state->target);
+ topaque = BTPageGetOpaque(state->target);
nonpivot = P_ISLEAF(topaque) && upperbound >= P_FIRSTDATAKEY(topaque);
/* Get number of keys + heap TID for item to the right */
bool nonpivot;
child = (IndexTuple) PageGetItem(nontarget, itemid);
- copaque = (BTPageOpaque) PageGetSpecialPointer(nontarget);
+ copaque = BTPageGetOpaque(nontarget);
nonpivot = P_ISLEAF(copaque) && upperbound >= P_FIRSTDATAKEY(copaque);
/* Get number of keys + heap TID for child/non-target item */
memcpy(page, BufferGetPage(buffer), BLCKSZ);
UnlockReleaseBuffer(buffer);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
if (P_ISMETA(opaque) && blocknum != BTREE_METAPAGE)
ereport(ERROR,
Page page = BufferGetPage(buffer);
PageHeader phdr = (PageHeader) page;
OffsetNumber maxoff = PageGetMaxOffsetNumber(page);
- BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ BTPageOpaque opaque = BTPageGetOpaque(page);
int item_size = 0;
int off;
uargs->offset = FirstOffsetNumber;
- opaque = (BTPageOpaque) PageGetSpecialPointer(uargs->page);
+ opaque = BTPageGetOpaque(uargs->page);
if (!P_ISDELETED(opaque))
fctx->max_calls = PageGetMaxOffsetNumber(uargs->page);
(int) MAXALIGN(sizeof(BTPageOpaqueData)),
(int) PageGetSpecialSize(uargs->page))));
- opaque = (BTPageOpaque) PageGetSpecialPointer(uargs->page);
+ opaque = BTPageGetOpaque(uargs->page);
if (P_ISMETA(opaque))
ereport(ERROR,
(int) MAXALIGN(sizeof(HashPageOpaqueData)),
(int) PageGetSpecialSize(page))));
- pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
+ pageopaque = HashPageGetOpaque(page);
if (pageopaque->hasho_page_id != HASHO_PAGE_ID)
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
GetHashPageStatistics(Page page, HashPageStat *stat)
{
OffsetNumber maxoff = PageGetMaxOffsetNumber(page);
- HashPageOpaque opaque = (HashPageOpaque) PageGetSpecialPointer(page);
+ HashPageOpaque opaque = HashPageGetOpaque(page);
int off;
stat->dead_items = stat->live_items = 0;
type = "unused";
else
{
- opaque = (HashPageOpaque) PageGetSpecialPointer(page);
+ opaque = HashPageGetOpaque(page);
/* page type (flags) */
pagetype = opaque->hasho_flag & LH_PAGE_TYPE;
LockBuffer(buffer, BUFFER_LOCK_SHARE);
page = BufferGetPage(buffer);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/*
* Determine page type, and update totals.
HashPageOpaque opaque;
int pagetype;
- opaque = (HashPageOpaque) PageGetSpecialPointer(page);
+ opaque = HashPageGetOpaque(page);
pagetype = opaque->hasho_flag & LH_PAGE_TYPE;
if (pagetype == LH_BUCKET_PAGE)
{
BTPageOpaque opaque;
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
if (P_IGNORE(opaque))
{
/* deleted or half-dead page */
{
HashPageOpaque opaque;
- opaque = (HashPageOpaque) PageGetSpecialPointer(page);
+ opaque = HashPageGetOpaque(page);
switch (opaque->hasho_flag & LH_PAGE_TYPE)
{
case LH_UNUSED_PAGE:
_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
vacuum_delay_point();
page = BufferGetPage(buf);
- opaque = (HashPageOpaque) PageGetSpecialPointer(page);
+ opaque = HashPageGetOpaque(page);
/* Scan each tuple in page */
maxoffno = PageGetMaxOffsetNumber(page);
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();
true);
/* update backlink */
ovflpage = BufferGetPage(ovflbuf);
- ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage);
+ ovflopaque = HashPageGetOpaque(ovflpage);
ovflopaque->hasho_prevblkno = leftblk;
PageSetLSN(ovflpage, lsn);
HashPageOpaque leftopaque;
leftpage = BufferGetPage(leftbuf);
- leftopaque = (HashPageOpaque) PageGetSpecialPointer(leftpage);
+ leftopaque = HashPageGetOpaque(leftpage);
leftopaque->hasho_nextblkno = rightblk;
PageSetLSN(leftpage, lsn);
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;
HashPageOpaque oldopaque;
oldpage = BufferGetPage(oldbuf);
- oldopaque = (HashPageOpaque) PageGetSpecialPointer(oldpage);
+ oldopaque = HashPageGetOpaque(oldpage);
oldopaque->hasho_flag = xlrec->old_bucket_flag;
HashPageOpaque nopaque;
newpage = BufferGetPage(newbuf);
- nopaque = (HashPageOpaque) PageGetSpecialPointer(newpage);
+ nopaque = HashPageGetOpaque(newpage);
nopaque->hasho_flag = xlrec->new_bucket_flag;
*/
if (xldata->is_prev_bucket_same_wrt)
{
- HashPageOpaque writeopaque = (HashPageOpaque) PageGetSpecialPointer(writepage);
+ HashPageOpaque writeopaque = HashPageGetOpaque(writepage);
writeopaque->hasho_nextblkno = xldata->nextblkno;
}
_hash_pageinit(ovflpage, BufferGetPageSize(ovflbuf));
- ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage);
+ ovflopaque = HashPageGetOpaque(ovflpage);
ovflopaque->hasho_prevblkno = InvalidBlockNumber;
ovflopaque->hasho_nextblkno = InvalidBlockNumber;
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;
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;
{
HashPageOpaque pageopaque;
- pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
+ pageopaque = HashPageGetOpaque(page);
pageopaque->hasho_flag &= ~LH_PAGE_HAS_DEAD_TUPLES;
}
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);
* 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);
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)
bucket_buf = buf;
page = BufferGetPage(buf);
- pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
+ pageopaque = HashPageGetOpaque(page);
bucket = pageopaque->hasho_bucket;
/*
/* 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);
}
* 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));
BlockNumber nextblkno;
page = BufferGetPage(buf);
- pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
+ pageopaque = HashPageGetOpaque(page);
nextblkno = pageopaque->hasho_nextblkno;
if (!BlockNumberIsValid(nextblkno))
/* 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;
_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);
*/
_hash_pageinit(ovflpage, BufferGetPageSize(ovflbuf));
- ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage);
+ ovflopaque = HashPageGetOpaque(ovflpage);
ovflopaque->hasho_prevblkno = InvalidBlockNumber;
ovflopaque->hasho_nextblkno = InvalidBlockNumber;
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;
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;
_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;
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
LH_OVERFLOW_PAGE,
bstrategy);
rpage = BufferGetPage(rbuf);
- ropaque = (HashPageOpaque) PageGetSpecialPointer(rpage);
+ ropaque = HashPageGetOpaque(rpage);
Assert(ropaque->hasho_bucket == bucket);
} while (BlockNumberIsValid(ropaque->hasho_nextblkno));
wbuf = next_wbuf;
wpage = BufferGetPage(wbuf);
- wopaque = (HashPageOpaque) PageGetSpecialPointer(wpage);
+ wopaque = HashPageGetOpaque(wpage);
Assert(wopaque->hasho_bucket == bucket);
retain_pin = false;
LH_OVERFLOW_PAGE,
bstrategy);
rpage = BufferGetPage(rbuf);
- ropaque = (HashPageOpaque) PageGetSpecialPointer(rpage);
+ ropaque = HashPageGetOpaque(rpage);
Assert(ropaque->hasho_bucket == bucket);
}
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
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;
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
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
* 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;
*/
_hash_pageinit(page, BLCKSZ);
- ovflopaque = (HashPageOpaque) PageGetSpecialPointer(page);
+ ovflopaque = HashPageGetOpaque(page);
ovflopaque->hasho_prevblkno = InvalidBlockNumber;
ovflopaque->hasho_nextblkno = InvalidBlockNumber;
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,
/* 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;
/* 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);
}
/*
*/
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();
bucket_nbuf = nbuf;
npage = BufferGetPage(nbuf);
- npageopaque = (HashPageOpaque) PageGetSpecialPointer(npage);
+ npageopaque = HashPageGetOpaque(npage);
/* Scan each tuple in new page */
nmaxoffnum = PageGetMaxOffsetNumber(npage);
}
npage = BufferGetPage(bucket_nbuf);
- npageopaque = (HashPageOpaque) PageGetSpecialPointer(npage);
+ npageopaque = HashPageGetOpaque(npage);
nbucket = npageopaque->hasho_bucket;
_hash_splitbucket(rel, metabuf, obucket,
/* 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);
{
*pagep = BufferGetPage(*bufp);
TestForOldSnapshot(scan->xs_snapshot, rel, *pagep);
- *opaquep = (HashPageOpaque) PageGetSpecialPointer(*pagep);
+ *opaquep = HashPageGetOpaque(*pagep);
}
}
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,
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))
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;
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))
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);
if (flags)
{
- HashPageOpaque opaque = (HashPageOpaque) PageGetSpecialPointer(page);
+ HashPageOpaque opaque = HashPageGetOpaque(page);
if ((opaque->hasho_flag & flags) == 0)
ereport(ERROR,
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++)
minoff,
maxoff;
Page page = BufferGetPage(buf);
- BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ BTPageOpaque opaque = BTPageGetOpaque(page);
Page newpage;
BTDedupState state;
Size pagesaving = 0;
*/
if (P_HAS_GARBAGE(opaque))
{
- BTPageOpaque nopaque = (BTPageOpaque) PageGetSpecialPointer(newpage);
+ BTPageOpaque nopaque = BTPageGetOpaque(newpage);
nopaque->btpo_flags &= ~BTP_HAS_GARBAGE;
}
minoff,
maxoff;
Page page = BufferGetPage(buf);
- BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ BTPageOpaque opaque = BTPageGetOpaque(page);
BTDedupState state;
TM_IndexDeleteOp delstate;
bool neverdedup;
_bt_checkpage(rel, insertstate->buf);
page = BufferGetPage(insertstate->buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/*
* Check if the page is still the rightmost leaf page and has
InitDirtySnapshot(SnapshotDirty);
page = BufferGetPage(insertstate->buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
maxoff = PageGetMaxOffsetNumber(page);
/*
nbuf = _bt_relandgetbuf(rel, nbuf, nblkno, BT_READ);
page = BufferGetPage(nbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
if (!P_IGNORE(opaque))
break;
if (P_RIGHTMOST(opaque))
BTPageOpaque opaque;
OffsetNumber newitemoff;
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/* Check 1/3 of a page restriction */
if (unlikely(insertstate->itemsz > BTMaxItemSize(page)))
_bt_stepright(rel, insertstate, stack);
/* Update local state after stepping right */
page = BufferGetPage(insertstate->buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/* Assume duplicates (if checkingunique) */
uniquedup = true;
}
_bt_stepright(rel, insertstate, stack);
/* Update local state after stepping right */
page = BufferGetPage(insertstate->buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
}
}
BlockNumber rblkno;
page = BufferGetPage(insertstate->buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
rbuf = InvalidBuffer;
rblkno = opaque->btpo_next;
{
rbuf = _bt_relandgetbuf(rel, rbuf, rblkno, BT_WRITE);
page = BufferGetPage(rbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/*
* If this page was incompletely split, finish the split now. We do
IndexTuple nposting = NULL;
page = BufferGetPage(buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
isleaf = P_ISLEAF(opaque);
isroot = P_ISROOT(opaque);
isrightmost = P_RIGHTMOST(opaque);
if (!isleaf)
{
Page cpage = BufferGetPage(cbuf);
- BTPageOpaque cpageop = (BTPageOpaque) PageGetSpecialPointer(cpage);
+ BTPageOpaque cpageop = BTPageGetOpaque(cpage);
Assert(P_INCOMPLETE_SPLIT(cpageop));
cpageop->btpo_flags &= ~BTP_INCOMPLETE_SPLIT;
* only workspace.
*/
origpage = BufferGetPage(buf);
- oopaque = (BTPageOpaque) PageGetSpecialPointer(origpage);
+ oopaque = BTPageGetOpaque(origpage);
isleaf = P_ISLEAF(oopaque);
isrightmost = P_RIGHTMOST(oopaque);
maxoff = PageGetMaxOffsetNumber(origpage);
/* Allocate temp buffer for leftpage */
leftpage = PageGetTempPage(origpage);
_bt_pageinit(leftpage, BufferGetPageSize(buf));
- lopaque = (BTPageOpaque) PageGetSpecialPointer(leftpage);
+ lopaque = BTPageGetOpaque(leftpage);
/*
* leftpage won't be the root when we're done. Also, clear the SPLIT_END
rightpage = BufferGetPage(rbuf);
rightpagenumber = BufferGetBlockNumber(rbuf);
/* rightpage was initialized by _bt_getbuf */
- ropaque = (BTPageOpaque) PageGetSpecialPointer(rightpage);
+ ropaque = BTPageGetOpaque(rightpage);
/*
* Finish off remaining leftpage special area fields. They cannot be set
{
sbuf = _bt_getbuf(rel, oopaque->btpo_next, BT_WRITE);
spage = BufferGetPage(sbuf);
- sopaque = (BTPageOpaque) PageGetSpecialPointer(spage);
+ sopaque = BTPageGetOpaque(spage);
if (sopaque->btpo_prev != origpagenumber)
{
memset(rightpage, 0, BufferGetPageSize(rbuf));
if (!isleaf)
{
Page cpage = BufferGetPage(cbuf);
- BTPageOpaque cpageop = (BTPageOpaque) PageGetSpecialPointer(cpage);
+ BTPageOpaque cpageop = BTPageGetOpaque(cpage);
cpageop->btpo_flags &= ~BTP_INCOMPLETE_SPLIT;
MarkBufferDirty(cbuf);
BTPageOpaque opaque;
elog(DEBUG2, "concurrent ROOT page split");
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/*
* We should never reach here when a leaf page split takes place
_bt_finish_split(Relation rel, Buffer lbuf, BTStack stack)
{
Page lpage = BufferGetPage(lbuf);
- BTPageOpaque lpageop = (BTPageOpaque) PageGetSpecialPointer(lpage);
+ BTPageOpaque lpageop = BTPageGetOpaque(lpage);
Buffer rbuf;
Page rpage;
BTPageOpaque rpageop;
/* Lock right sibling, the one missing the downlink */
rbuf = _bt_getbuf(rel, lpageop->btpo_next, BT_WRITE);
rpage = BufferGetPage(rbuf);
- rpageop = (BTPageOpaque) PageGetSpecialPointer(rpage);
+ rpageop = BTPageGetOpaque(rpage);
/* Could this be a root split? */
if (!stack)
buf = _bt_getbuf(rel, blkno, BT_WRITE);
page = BufferGetPage(buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
if (P_INCOMPLETE_SPLIT(opaque))
{
lbkno = BufferGetBlockNumber(lbuf);
rbkno = BufferGetBlockNumber(rbuf);
lpage = BufferGetPage(lbuf);
- lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage);
+ lopaque = BTPageGetOpaque(lpage);
/* get a new root page */
rootbuf = _bt_getbuf(rel, P_NEW, BT_WRITE);
_bt_upgrademetapage(metapg);
/* set btree special data */
- rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
+ rootopaque = BTPageGetOpaque(rootpage);
rootopaque->btpo_prev = rootopaque->btpo_next = P_NONE;
rootopaque->btpo_flags = BTP_ROOT;
rootopaque->btpo_level =
- ((BTPageOpaque) PageGetSpecialPointer(lpage))->btpo_level + 1;
+ (BTPageGetOpaque(lpage))->btpo_level + 1;
rootopaque->btpo_cycleid = 0;
/* update metapage data */
Buffer buffer = insertstate->buf;
BTScanInsert itup_key = insertstate->itup_key;
Page page = BufferGetPage(buffer);
- BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ BTPageOpaque opaque = BTPageGetOpaque(page);
Assert(P_ISLEAF(opaque));
Assert(simpleonly || itup_key->heapkeyspace);
metad->btm_last_cleanup_num_heap_tuples = -1.0;
metad->btm_allequalimage = allequalimage;
- metaopaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ metaopaque = BTPageGetOpaque(page);
metaopaque->btpo_flags = BTP_META;
/*
BTPageOpaque metaopaque PG_USED_FOR_ASSERTS_ONLY;
metad = BTPageGetMeta(page);
- metaopaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ metaopaque = BTPageGetOpaque(page);
/* It must be really a meta page of upgradable version */
Assert(metaopaque->btpo_flags & BTP_META);
BTMetaPageData *metad;
metapg = BufferGetPage(metabuf);
- metaopaque = (BTPageOpaque) PageGetSpecialPointer(metapg);
+ metaopaque = BTPageGetOpaque(metapg);
metad = BTPageGetMeta(metapg);
/* sanity-check the metapage */
rootbuf = _bt_getbuf(rel, rootblkno, BT_READ);
rootpage = BufferGetPage(rootbuf);
- rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
+ rootopaque = BTPageGetOpaque(rootpage);
/*
* Since the cache might be stale, we check the page more carefully
rootbuf = _bt_getbuf(rel, P_NEW, BT_WRITE);
rootblkno = BufferGetBlockNumber(rootbuf);
rootpage = BufferGetPage(rootbuf);
- rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
+ rootopaque = BTPageGetOpaque(rootpage);
rootopaque->btpo_prev = rootopaque->btpo_next = P_NONE;
rootopaque->btpo_flags = (BTP_LEAF | BTP_ROOT);
rootopaque->btpo_level = 0;
{
rootbuf = _bt_relandgetbuf(rel, rootbuf, rootblkno, BT_READ);
rootpage = BufferGetPage(rootbuf);
- rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
+ rootopaque = BTPageGetOpaque(rootpage);
if (!P_IGNORE(rootopaque))
break;
metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_READ);
metapg = BufferGetPage(metabuf);
- metaopaque = (BTPageOpaque) PageGetSpecialPointer(metapg);
+ metaopaque = BTPageGetOpaque(metapg);
metad = BTPageGetMeta(metapg);
if (!P_ISMETA(metaopaque) ||
{
rootbuf = _bt_relandgetbuf(rel, rootbuf, rootblkno, BT_READ);
rootpage = BufferGetPage(rootbuf);
- rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
+ rootopaque = BTPageGetOpaque(rootpage);
if (!P_IGNORE(rootopaque))
break;
* We can clear the vacuum cycle ID since this page has certainly been
* processed by the current vacuum scan.
*/
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
opaque->btpo_cycleid = 0;
/*
* Unlike _bt_delitems_vacuum, we *must not* clear the vacuum cycle ID at
* this point. The VACUUM command alone controls vacuum cycle IDs.
*/
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/*
* Clear the BTP_HAS_GARBAGE page flag.
buf = _bt_getbuf(rel, leftsib, BT_READ);
page = BufferGetPage(buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/*
* If the left sibling was concurrently split, so that its next-pointer
buf = _bt_getbuf(rel, leafrightsib, BT_READ);
page = BufferGetPage(buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
Assert(P_ISLEAF(opaque) && !P_ISDELETED(opaque));
result = P_ISHALFDEAD(opaque);
for (;;)
{
page = BufferGetPage(leafbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/*
* Internal pages are never deleted directly, only as part of deleting
IndexTupleData trunctuple;
page = BufferGetPage(leafbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
Assert(!P_RIGHTMOST(opaque) && !P_ISROOT(opaque) &&
P_ISLEAF(opaque) && !P_IGNORE(opaque) &&
* before entering the critical section --- otherwise it'd be a PANIC.
*/
page = BufferGetPage(subtreeparent);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
#ifdef USE_ASSERT_CHECKING
* nbtree/README.
*/
page = BufferGetPage(subtreeparent);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
itemid = PageGetItemId(page, poffset);
itup = (IndexTuple) PageGetItem(page, itemid);
* is set to InvalidBlockNumber.
*/
page = BufferGetPage(leafbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
opaque->btpo_flags |= BTP_HALF_DEAD;
Assert(PageGetMaxOffsetNumber(page) == P_HIKEY);
XLogRegisterBuffer(1, subtreeparent, REGBUF_STANDARD);
page = BufferGetPage(leafbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
xlrec.leftblk = opaque->btpo_prev;
xlrec.rightblk = opaque->btpo_next;
BlockNumber leaftopparent;
page = BufferGetPage(leafbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
Assert(P_ISLEAF(opaque) && !P_ISDELETED(opaque) && P_ISHALFDEAD(opaque));
/* Fetch the block number of the target's left sibling */
buf = _bt_getbuf(rel, target, BT_READ);
page = BufferGetPage(buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
leftsib = opaque->btpo_prev;
targetlevel = opaque->btpo_level;
Assert(targetlevel > 0);
{
lbuf = _bt_getbuf(rel, leftsib, BT_WRITE);
page = BufferGetPage(lbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
while (P_ISDELETED(opaque) || opaque->btpo_next != target)
{
bool leftsibvalid = true;
/* step right one page */
lbuf = _bt_getbuf(rel, leftsib, BT_WRITE);
page = BufferGetPage(lbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
}
}
else
/* Next write-lock the target page itself */
_bt_lockbuf(rel, buf, BT_WRITE);
page = BufferGetPage(buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/*
* Check page is still empty etc, else abandon deletion. This is just for
rightsib = opaque->btpo_next;
rbuf = _bt_getbuf(rel, rightsib, BT_WRITE);
page = BufferGetPage(rbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
if (opaque->btpo_prev != target)
ereport(ERROR,
(errcode(ERRCODE_INDEX_CORRUPTED),
if (leftsib == P_NONE && rightsib_is_rightmost)
{
page = BufferGetPage(rbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
if (P_RIGHTMOST(opaque))
{
/* rightsib will be the only one left on the level */
if (BufferIsValid(lbuf))
{
page = BufferGetPage(lbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
Assert(opaque->btpo_next == target);
opaque->btpo_next = rightsib;
}
page = BufferGetPage(rbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
Assert(opaque->btpo_prev == target);
opaque->btpo_prev = leftsib;
* of that scan.
*/
page = BufferGetPage(buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
Assert(P_ISHALFDEAD(opaque) || !P_ISLEAF(opaque));
/*
parentoffset = stack->bts_offset;
page = BufferGetPage(pbuf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
maxoff = PageGetMaxOffsetNumber(page);
leftsibparent = opaque->btpo_prev;
if (!PageIsNew(page))
{
_bt_checkpage(rel, buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
}
Assert(blkno <= scanblkno);
/* if this is a leaf page, we're done */
page = BufferGetPage(*bufP);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
if (P_ISLEAF(opaque))
break;
{
page = BufferGetPage(buf);
TestForOldSnapshot(snapshot, rel, page);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
if (P_RIGHTMOST(opaque))
break;
cmpval;
page = BufferGetPage(buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/* Requesting nextkey semantics while using scantid seems nonsensical */
Assert(!key->nextkey || key->scantid == NULL);
cmpval;
page = BufferGetPage(insertstate->buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
Assert(P_ISLEAF(opaque));
Assert(!key->nextkey);
OffsetNumber offnum)
{
TupleDesc itupdesc = RelationGetDescr(rel);
- BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ BTPageOpaque opaque = BTPageGetOpaque(page);
IndexTuple itup;
ItemPointer heapTid;
ScanKey scankey;
Assert(BufferIsValid(so->currPos.buf));
page = BufferGetPage(so->currPos.buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/* allow next page be processed by parallel worker */
if (scan->parallel_scan)
so->currPos.buf = _bt_getbuf(rel, blkno, BT_READ);
page = BufferGetPage(so->currPos.buf);
TestForOldSnapshot(scan->xs_snapshot, rel, page);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/* check for deleted page */
if (!P_IGNORE(opaque))
{
*/
page = BufferGetPage(so->currPos.buf);
TestForOldSnapshot(scan->xs_snapshot, rel, page);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
if (!P_IGNORE(opaque))
{
PredicateLockPage(rel, BufferGetBlockNumber(so->currPos.buf), scan->xs_snapshot);
BTPageOpaque opaque;
page = BufferGetPage(buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
for (;;)
{
buf = _bt_getbuf(rel, blkno, BT_READ);
page = BufferGetPage(buf);
TestForOldSnapshot(snapshot, rel, page);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
/*
* If this isn't the page we want, walk right till we find what we
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
page = BufferGetPage(buf);
TestForOldSnapshot(snapshot, rel, page);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
}
/* Return to the original page to see what's up */
buf = _bt_relandgetbuf(rel, buf, obknum, BT_READ);
page = BufferGetPage(buf);
TestForOldSnapshot(snapshot, rel, page);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
if (P_ISDELETED(opaque))
{
/*
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
page = BufferGetPage(buf);
TestForOldSnapshot(snapshot, rel, page);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
if (!P_ISDELETED(opaque))
break;
}
page = BufferGetPage(buf);
TestForOldSnapshot(snapshot, rel, page);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
for (;;)
{
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
page = BufferGetPage(buf);
TestForOldSnapshot(snapshot, rel, page);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
}
/* Done? */
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
page = BufferGetPage(buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
}
return buf;
PredicateLockPage(rel, BufferGetBlockNumber(buf), scan->xs_snapshot);
page = BufferGetPage(buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
Assert(P_ISLEAF(opaque));
if (ScanDirectionIsForward(dir))
_bt_pageinit(page, BLCKSZ);
/* Initialize BT opaque state */
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
opaque->btpo_prev = opaque->btpo_next = P_NONE;
opaque->btpo_level = level;
opaque->btpo_flags = (level > 0) ? 0 : BTP_LEAF;
Assert((BTreeTupleGetNAtts(state->btps_lowkey, wstate->index) <=
IndexRelationGetNumberOfKeyAttributes(wstate->index) &&
BTreeTupleGetNAtts(state->btps_lowkey, wstate->index) > 0) ||
- P_LEFTMOST((BTPageOpaque) PageGetSpecialPointer(opage)));
+ P_LEFTMOST(BTPageGetOpaque(opage)));
Assert(BTreeTupleGetNAtts(state->btps_lowkey, wstate->index) == 0 ||
- !P_LEFTMOST((BTPageOpaque) PageGetSpecialPointer(opage)));
+ !P_LEFTMOST(BTPageGetOpaque(opage)));
BTreeTupleSetDownLink(state->btps_lowkey, oblkno);
_bt_buildadd(wstate, state->btps_next, state->btps_lowkey, 0);
pfree(state->btps_lowkey);
* Set the sibling links for both pages.
*/
{
- BTPageOpaque oopaque = (BTPageOpaque) PageGetSpecialPointer(opage);
- BTPageOpaque nopaque = (BTPageOpaque) PageGetSpecialPointer(npage);
+ BTPageOpaque oopaque = BTPageGetOpaque(opage);
+ BTPageOpaque nopaque = BTPageGetOpaque(npage);
oopaque->btpo_next = nblkno;
nopaque->btpo_prev = oblkno;
BTPageOpaque opaque;
blkno = s->btps_blkno;
- opaque = (BTPageOpaque) PageGetSpecialPointer(s->btps_page);
+ opaque = BTPageGetOpaque(s->btps_page);
/*
* We have to link the last page on this level to somewhere.
SplitPoint leftpage,
rightpage;
- opaque = (BTPageOpaque) PageGetSpecialPointer(origpage);
+ opaque = BTPageGetOpaque(origpage);
maxoff = PageGetMaxOffsetNumber(origpage);
/* Total free space available on a btree page, after fixed overhead */
}
}
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
minoff = P_FIRSTDATAKEY(opaque);
maxoff = PageGetMaxOffsetNumber(page);
{
int16 natts = IndexRelationGetNumberOfAttributes(rel);
int16 nkeyatts = IndexRelationGetNumberOfKeyAttributes(rel);
- BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ BTPageOpaque opaque = BTPageGetOpaque(page);
IndexTuple itup;
int tupnatts;
* Internal page insertions cannot fail here, because that would mean that
* an earlier leaf level insertion that should have failed didn't
*/
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
if (!P_ISLEAF(opaque))
elog(ERROR, "cannot insert oversized tuple of size %zu on internal page of index \"%s\"",
itemsz, RelationGetRelationName(rel));
md->btm_last_cleanup_num_heap_tuples = -1.0;
md->btm_allequalimage = xlrec->allequalimage;
- pageop = (BTPageOpaque) PageGetSpecialPointer(metapg);
+ pageop = BTPageGetOpaque(metapg);
pageop->btpo_flags = BTP_META;
/*
if (XLogReadBufferForRedo(record, block_id, &buf) == BLK_NEEDS_REDO)
{
Page page = (Page) BufferGetPage(buf);
- BTPageOpaque pageop = (BTPageOpaque) PageGetSpecialPointer(page);
+ BTPageOpaque pageop = BTPageGetOpaque(page);
Assert(P_INCOMPLETE_SPLIT(pageop));
pageop->btpo_flags &= ~BTP_INCOMPLETE_SPLIT;
rpage = (Page) BufferGetPage(rbuf);
_bt_pageinit(rpage, BufferGetPageSize(rbuf));
- ropaque = (BTPageOpaque) PageGetSpecialPointer(rpage);
+ ropaque = BTPageGetOpaque(rpage);
ropaque->btpo_prev = origpagenumber;
ropaque->btpo_next = spagenumber;
* same for the right page.
*/
Page origpage = (Page) BufferGetPage(buf);
- BTPageOpaque oopaque = (BTPageOpaque) PageGetSpecialPointer(origpage);
+ BTPageOpaque oopaque = BTPageGetOpaque(origpage);
OffsetNumber off;
IndexTuple newitem = NULL,
left_hikey = NULL,
if (XLogReadBufferForRedo(record, 2, &sbuf) == BLK_NEEDS_REDO)
{
Page spage = (Page) BufferGetPage(sbuf);
- BTPageOpaque spageop = (BTPageOpaque) PageGetSpecialPointer(spage);
+ BTPageOpaque spageop = BTPageGetOpaque(spage);
spageop->btpo_prev = rightpagenumber;
{
char *ptr = XLogRecGetBlockData(record, 0, NULL);
Page page = (Page) BufferGetPage(buf);
- BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ BTPageOpaque opaque = BTPageGetOpaque(page);
OffsetNumber offnum,
minoff,
maxoff;
if (P_HAS_GARBAGE(opaque))
{
- BTPageOpaque nopaque = (BTPageOpaque) PageGetSpecialPointer(newpage);
+ BTPageOpaque nopaque = BTPageGetOpaque(newpage);
nopaque->btpo_flags &= ~BTP_HAS_GARBAGE;
}
* Mark the page as not containing any LP_DEAD items --- see comments
* in _bt_delitems_vacuum().
*/
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
opaque->btpo_flags &= ~BTP_HAS_GARBAGE;
PageSetLSN(page, lsn);
PageIndexMultiDelete(page, (OffsetNumber *) ptr, xlrec->ndeleted);
/* Mark the page as not containing any LP_DEAD items */
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
opaque->btpo_flags &= ~BTP_HAS_GARBAGE;
PageSetLSN(page, lsn);
BlockNumber rightsib;
page = (Page) BufferGetPage(buffer);
- pageop = (BTPageOpaque) PageGetSpecialPointer(page);
+ pageop = BTPageGetOpaque(page);
poffset = xlrec->poffset;
page = (Page) BufferGetPage(buffer);
_bt_pageinit(page, BufferGetPageSize(buffer));
- pageop = (BTPageOpaque) PageGetSpecialPointer(page);
+ pageop = BTPageGetOpaque(page);
pageop->btpo_prev = xlrec->leftblk;
pageop->btpo_next = xlrec->rightblk;
if (XLogReadBufferForRedo(record, 1, &leftbuf) == BLK_NEEDS_REDO)
{
page = (Page) BufferGetPage(leftbuf);
- pageop = (BTPageOpaque) PageGetSpecialPointer(page);
+ pageop = BTPageGetOpaque(page);
pageop->btpo_next = rightsib;
PageSetLSN(page, lsn);
page = (Page) BufferGetPage(target);
_bt_pageinit(page, BufferGetPageSize(target));
- pageop = (BTPageOpaque) PageGetSpecialPointer(page);
+ pageop = BTPageGetOpaque(page);
pageop->btpo_prev = leftsib;
pageop->btpo_next = rightsib;
if (XLogReadBufferForRedo(record, 2, &rightbuf) == BLK_NEEDS_REDO)
{
page = (Page) BufferGetPage(rightbuf);
- pageop = (BTPageOpaque) PageGetSpecialPointer(page);
+ pageop = BTPageGetOpaque(page);
pageop->btpo_prev = leftsib;
PageSetLSN(page, lsn);
page = (Page) BufferGetPage(leafbuf);
_bt_pageinit(page, BufferGetPageSize(leafbuf));
- pageop = (BTPageOpaque) PageGetSpecialPointer(page);
+ pageop = BTPageGetOpaque(page);
pageop->btpo_flags = BTP_HALF_DEAD | BTP_LEAF;
pageop->btpo_prev = xlrec->leafleftsib;
page = (Page) BufferGetPage(buffer);
_bt_pageinit(page, BufferGetPageSize(buffer));
- pageop = (BTPageOpaque) PageGetSpecialPointer(page);
+ pageop = BTPageGetOpaque(page);
pageop->btpo_flags = BTP_ROOT;
pageop->btpo_prev = pageop->btpo_next = P_NONE;
mask_page_hint_bits(page);
mask_unused_space(page);
- maskopaq = (BTPageOpaque) PageGetSpecialPointer(page);
+ maskopaq = BTPageGetOpaque(page);
if (P_ISLEAF(maskopaq))
{
typedef HashPageOpaqueData *HashPageOpaque;
+#define HashPageGetOpaque(page) ((HashPageOpaque) PageGetSpecialPointer(page))
+
#define H_NEEDS_SPLIT_CLEANUP(opaque) (((opaque)->hasho_flag & LH_BUCKET_NEEDS_SPLIT_CLEANUP) != 0)
#define H_BUCKET_BEING_SPLIT(opaque) (((opaque)->hasho_flag & LH_BUCKET_BEING_SPLIT) != 0)
#define H_BUCKET_BEING_POPULATED(opaque) (((opaque)->hasho_flag & LH_BUCKET_BEING_POPULATED) != 0)
typedef BTPageOpaqueData *BTPageOpaque;
+#define BTPageGetOpaque(page) ((BTPageOpaque) PageGetSpecialPointer(page))
+
/* Bits defined in btpo_flags */
#define BTP_LEAF (1 << 0) /* leaf page, i.e. not internal page */
#define BTP_ROOT (1 << 1) /* root page (has no parent) */
PageHeader header;
BTDeletedPageData *contents;
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
header = ((PageHeader) page);
opaque->btpo_flags &= ~BTP_HALF_DEAD;
/* We only expect to be called with a deleted page */
Assert(!PageIsNew(page));
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
Assert(P_ISDELETED(opaque));
/* pg_upgrade'd deleted page -- must be safe to delete now */
Assert(!PageIsNew(page));
/* Recycling okay iff page is deleted and safexid is old enough */
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ opaque = BTPageGetOpaque(page);
if (P_ISDELETED(opaque))
{
/*