mirror of
https://github.com/postgres/postgres.git
synced 2025-08-25 20:23:07 +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:
@@ -62,7 +62,7 @@ _bt_dedup_pass(Relation rel, Buffer buf, Relation heapRel, IndexTuple newitem,
|
||||
minoff,
|
||||
maxoff;
|
||||
Page page = BufferGetPage(buf);
|
||||
BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
BTPageOpaque opaque = BTPageGetOpaque(page);
|
||||
Page newpage;
|
||||
BTDedupState state;
|
||||
Size pagesaving = 0;
|
||||
@@ -231,7 +231,7 @@ _bt_dedup_pass(Relation rel, Buffer buf, Relation heapRel, IndexTuple newitem,
|
||||
*/
|
||||
if (P_HAS_GARBAGE(opaque))
|
||||
{
|
||||
BTPageOpaque nopaque = (BTPageOpaque) PageGetSpecialPointer(newpage);
|
||||
BTPageOpaque nopaque = BTPageGetOpaque(newpage);
|
||||
|
||||
nopaque->btpo_flags &= ~BTP_HAS_GARBAGE;
|
||||
}
|
||||
@@ -310,7 +310,7 @@ _bt_bottomupdel_pass(Relation rel, Buffer buf, Relation heapRel,
|
||||
minoff,
|
||||
maxoff;
|
||||
Page page = BufferGetPage(buf);
|
||||
BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
BTPageOpaque opaque = BTPageGetOpaque(page);
|
||||
BTDedupState state;
|
||||
TM_IndexDeleteOp delstate;
|
||||
bool neverdedup;
|
||||
|
@@ -329,7 +329,7 @@ _bt_search_insert(Relation rel, BTInsertState insertstate)
|
||||
|
||||
_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
|
||||
@@ -428,7 +428,7 @@ _bt_check_unique(Relation rel, BTInsertState insertstate, Relation heapRel,
|
||||
InitDirtySnapshot(SnapshotDirty);
|
||||
|
||||
page = BufferGetPage(insertstate->buf);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
maxoff = PageGetMaxOffsetNumber(page);
|
||||
|
||||
/*
|
||||
@@ -733,7 +733,7 @@ _bt_check_unique(Relation rel, BTInsertState insertstate, Relation heapRel,
|
||||
|
||||
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))
|
||||
@@ -822,7 +822,7 @@ _bt_findinsertloc(Relation rel,
|
||||
BTPageOpaque opaque;
|
||||
OffsetNumber newitemoff;
|
||||
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
|
||||
/* Check 1/3 of a page restriction */
|
||||
if (unlikely(insertstate->itemsz > BTMaxItemSize(page)))
|
||||
@@ -888,7 +888,7 @@ _bt_findinsertloc(Relation rel,
|
||||
_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;
|
||||
}
|
||||
@@ -972,7 +972,7 @@ _bt_findinsertloc(Relation rel,
|
||||
_bt_stepright(rel, insertstate, stack);
|
||||
/* Update local state after stepping right */
|
||||
page = BufferGetPage(insertstate->buf);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1030,7 +1030,7 @@ _bt_stepright(Relation rel, BTInsertState insertstate, BTStack stack)
|
||||
BlockNumber rblkno;
|
||||
|
||||
page = BufferGetPage(insertstate->buf);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
|
||||
rbuf = InvalidBuffer;
|
||||
rblkno = opaque->btpo_next;
|
||||
@@ -1038,7 +1038,7 @@ _bt_stepright(Relation rel, BTInsertState insertstate, BTStack stack)
|
||||
{
|
||||
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
|
||||
@@ -1120,7 +1120,7 @@ _bt_insertonpg(Relation rel,
|
||||
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);
|
||||
@@ -1296,7 +1296,7 @@ _bt_insertonpg(Relation rel,
|
||||
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;
|
||||
@@ -1504,7 +1504,7 @@ _bt_split(Relation rel, BTScanInsert itup_key, Buffer buf, Buffer cbuf,
|
||||
* only workspace.
|
||||
*/
|
||||
origpage = BufferGetPage(buf);
|
||||
oopaque = (BTPageOpaque) PageGetSpecialPointer(origpage);
|
||||
oopaque = BTPageGetOpaque(origpage);
|
||||
isleaf = P_ISLEAF(oopaque);
|
||||
isrightmost = P_RIGHTMOST(oopaque);
|
||||
maxoff = PageGetMaxOffsetNumber(origpage);
|
||||
@@ -1540,7 +1540,7 @@ _bt_split(Relation rel, BTScanInsert itup_key, Buffer buf, Buffer cbuf,
|
||||
/* 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
|
||||
@@ -1716,7 +1716,7 @@ _bt_split(Relation rel, BTScanInsert itup_key, Buffer buf, Buffer cbuf,
|
||||
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
|
||||
@@ -1887,7 +1887,7 @@ _bt_split(Relation rel, BTScanInsert itup_key, Buffer buf, Buffer cbuf,
|
||||
{
|
||||
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));
|
||||
@@ -1952,7 +1952,7 @@ _bt_split(Relation rel, BTScanInsert itup_key, Buffer buf, Buffer cbuf,
|
||||
if (!isleaf)
|
||||
{
|
||||
Page cpage = BufferGetPage(cbuf);
|
||||
BTPageOpaque cpageop = (BTPageOpaque) PageGetSpecialPointer(cpage);
|
||||
BTPageOpaque cpageop = BTPageGetOpaque(cpage);
|
||||
|
||||
cpageop->btpo_flags &= ~BTP_INCOMPLETE_SPLIT;
|
||||
MarkBufferDirty(cbuf);
|
||||
@@ -2139,7 +2139,7 @@ _bt_insert_parent(Relation rel,
|
||||
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
|
||||
@@ -2230,7 +2230,7 @@ void
|
||||
_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;
|
||||
@@ -2242,7 +2242,7 @@ _bt_finish_split(Relation rel, Buffer lbuf, BTStack stack)
|
||||
/* 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)
|
||||
@@ -2320,7 +2320,7 @@ _bt_getstackbuf(Relation rel, BTStack stack, BlockNumber child)
|
||||
|
||||
buf = _bt_getbuf(rel, blkno, BT_WRITE);
|
||||
page = BufferGetPage(buf);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
|
||||
if (P_INCOMPLETE_SPLIT(opaque))
|
||||
{
|
||||
@@ -2451,7 +2451,7 @@ _bt_newroot(Relation rel, Buffer lbuf, Buffer rbuf)
|
||||
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);
|
||||
@@ -2492,11 +2492,11 @@ _bt_newroot(Relation rel, Buffer lbuf, Buffer rbuf)
|
||||
_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 */
|
||||
@@ -2680,7 +2680,7 @@ _bt_delete_or_dedup_one_page(Relation rel, Relation heapRel,
|
||||
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);
|
||||
|
@@ -85,7 +85,7 @@ _bt_initmetapage(Page page, BlockNumber rootbknum, uint32 level,
|
||||
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;
|
||||
|
||||
/*
|
||||
@@ -112,7 +112,7 @@ _bt_upgrademetapage(Page page)
|
||||
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);
|
||||
@@ -148,7 +148,7 @@ _bt_getmeta(Relation rel, Buffer metabuf)
|
||||
BTMetaPageData *metad;
|
||||
|
||||
metapg = BufferGetPage(metabuf);
|
||||
metaopaque = (BTPageOpaque) PageGetSpecialPointer(metapg);
|
||||
metaopaque = BTPageGetOpaque(metapg);
|
||||
metad = BTPageGetMeta(metapg);
|
||||
|
||||
/* sanity-check the metapage */
|
||||
@@ -372,7 +372,7 @@ _bt_getroot(Relation rel, int access)
|
||||
|
||||
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
|
||||
@@ -440,7 +440,7 @@ _bt_getroot(Relation rel, int access)
|
||||
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;
|
||||
@@ -534,7 +534,7 @@ _bt_getroot(Relation rel, int access)
|
||||
{
|
||||
rootbuf = _bt_relandgetbuf(rel, rootbuf, rootblkno, BT_READ);
|
||||
rootpage = BufferGetPage(rootbuf);
|
||||
rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
|
||||
rootopaque = BTPageGetOpaque(rootpage);
|
||||
|
||||
if (!P_IGNORE(rootopaque))
|
||||
break;
|
||||
@@ -598,7 +598,7 @@ _bt_gettrueroot(Relation rel)
|
||||
|
||||
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) ||
|
||||
@@ -637,7 +637,7 @@ _bt_gettrueroot(Relation rel)
|
||||
{
|
||||
rootbuf = _bt_relandgetbuf(rel, rootbuf, rootblkno, BT_READ);
|
||||
rootpage = BufferGetPage(rootbuf);
|
||||
rootopaque = (BTPageOpaque) PageGetSpecialPointer(rootpage);
|
||||
rootopaque = BTPageGetOpaque(rootpage);
|
||||
|
||||
if (!P_IGNORE(rootopaque))
|
||||
break;
|
||||
@@ -1220,7 +1220,7 @@ _bt_delitems_vacuum(Relation rel, Buffer buf,
|
||||
* 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;
|
||||
|
||||
/*
|
||||
@@ -1338,7 +1338,7 @@ _bt_delitems_delete(Relation rel, Buffer buf, TransactionId latestRemovedXid,
|
||||
* 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.
|
||||
@@ -1718,7 +1718,7 @@ _bt_leftsib_splitflag(Relation rel, BlockNumber leftsib, BlockNumber target)
|
||||
|
||||
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
|
||||
@@ -1773,7 +1773,7 @@ _bt_rightsib_halfdeadflag(Relation rel, BlockNumber leafrightsib)
|
||||
|
||||
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);
|
||||
@@ -1842,7 +1842,7 @@ _bt_pagedel(Relation rel, Buffer leafbuf, BTVacState *vstate)
|
||||
for (;;)
|
||||
{
|
||||
page = BufferGetPage(leafbuf);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
|
||||
/*
|
||||
* Internal pages are never deleted directly, only as part of deleting
|
||||
@@ -2099,7 +2099,7 @@ _bt_mark_page_halfdead(Relation rel, Buffer leafbuf, BTStack stack)
|
||||
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) &&
|
||||
@@ -2154,7 +2154,7 @@ _bt_mark_page_halfdead(Relation rel, Buffer leafbuf, BTStack stack)
|
||||
* 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
|
||||
|
||||
@@ -2201,7 +2201,7 @@ _bt_mark_page_halfdead(Relation rel, Buffer leafbuf, BTStack stack)
|
||||
* nbtree/README.
|
||||
*/
|
||||
page = BufferGetPage(subtreeparent);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
|
||||
itemid = PageGetItemId(page, poffset);
|
||||
itup = (IndexTuple) PageGetItem(page, itemid);
|
||||
@@ -2216,7 +2216,7 @@ _bt_mark_page_halfdead(Relation rel, Buffer leafbuf, BTStack stack)
|
||||
* 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);
|
||||
@@ -2253,7 +2253,7 @@ _bt_mark_page_halfdead(Relation rel, Buffer leafbuf, BTStack stack)
|
||||
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;
|
||||
|
||||
@@ -2325,7 +2325,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, BlockNumber scanblkno,
|
||||
BlockNumber leaftopparent;
|
||||
|
||||
page = BufferGetPage(leafbuf);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
|
||||
Assert(P_ISLEAF(opaque) && !P_ISDELETED(opaque) && P_ISHALFDEAD(opaque));
|
||||
|
||||
@@ -2364,7 +2364,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, BlockNumber scanblkno,
|
||||
/* 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);
|
||||
@@ -2391,7 +2391,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, BlockNumber scanblkno,
|
||||
{
|
||||
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;
|
||||
@@ -2441,7 +2441,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, BlockNumber scanblkno,
|
||||
/* step right one page */
|
||||
lbuf = _bt_getbuf(rel, leftsib, BT_WRITE);
|
||||
page = BufferGetPage(lbuf);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -2450,7 +2450,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, BlockNumber scanblkno,
|
||||
/* 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
|
||||
@@ -2505,7 +2505,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, BlockNumber scanblkno,
|
||||
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),
|
||||
@@ -2528,7 +2528,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, BlockNumber scanblkno,
|
||||
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 */
|
||||
@@ -2565,12 +2565,12 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, BlockNumber scanblkno,
|
||||
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;
|
||||
|
||||
@@ -2599,7 +2599,7 @@ _bt_unlink_halfdead_page(Relation rel, Buffer leafbuf, BlockNumber scanblkno,
|
||||
* of that scan.
|
||||
*/
|
||||
page = BufferGetPage(buf);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
Assert(P_ISHALFDEAD(opaque) || !P_ISLEAF(opaque));
|
||||
|
||||
/*
|
||||
@@ -2814,7 +2814,7 @@ _bt_lock_subtree_parent(Relation rel, BlockNumber child, BTStack stack,
|
||||
parentoffset = stack->bts_offset;
|
||||
|
||||
page = BufferGetPage(pbuf);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
maxoff = PageGetMaxOffsetNumber(page);
|
||||
leftsibparent = opaque->btpo_prev;
|
||||
|
||||
|
@@ -1070,7 +1070,7 @@ backtrack:
|
||||
if (!PageIsNew(page))
|
||||
{
|
||||
_bt_checkpage(rel, buf);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
}
|
||||
|
||||
Assert(blkno <= scanblkno);
|
||||
|
@@ -134,7 +134,7 @@ _bt_search(Relation rel, BTScanInsert key, Buffer *bufP, int access,
|
||||
|
||||
/* if this is a leaf page, we're done */
|
||||
page = BufferGetPage(*bufP);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
if (P_ISLEAF(opaque))
|
||||
break;
|
||||
|
||||
@@ -268,7 +268,7 @@ _bt_moveright(Relation rel,
|
||||
{
|
||||
page = BufferGetPage(buf);
|
||||
TestForOldSnapshot(snapshot, rel, page);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
|
||||
if (P_RIGHTMOST(opaque))
|
||||
break;
|
||||
@@ -347,7 +347,7 @@ _bt_binsrch(Relation rel,
|
||||
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);
|
||||
@@ -451,7 +451,7 @@ _bt_binsrch_insert(Relation rel, BTInsertState insertstate)
|
||||
cmpval;
|
||||
|
||||
page = BufferGetPage(insertstate->buf);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
|
||||
Assert(P_ISLEAF(opaque));
|
||||
Assert(!key->nextkey);
|
||||
@@ -659,7 +659,7 @@ _bt_compare(Relation rel,
|
||||
OffsetNumber offnum)
|
||||
{
|
||||
TupleDesc itupdesc = RelationGetDescr(rel);
|
||||
BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
BTPageOpaque opaque = BTPageGetOpaque(page);
|
||||
IndexTuple itup;
|
||||
ItemPointer heapTid;
|
||||
ScanKey scankey;
|
||||
@@ -1536,7 +1536,7 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum)
|
||||
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)
|
||||
@@ -2007,7 +2007,7 @@ _bt_readnextpage(IndexScanDesc scan, BlockNumber blkno, ScanDirection dir)
|
||||
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))
|
||||
{
|
||||
@@ -2110,7 +2110,7 @@ _bt_readnextpage(IndexScanDesc scan, BlockNumber blkno, ScanDirection dir)
|
||||
*/
|
||||
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);
|
||||
@@ -2191,7 +2191,7 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot)
|
||||
BTPageOpaque opaque;
|
||||
|
||||
page = BufferGetPage(buf);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
@@ -2216,7 +2216,7 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot)
|
||||
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
|
||||
@@ -2243,14 +2243,14 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot)
|
||||
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))
|
||||
{
|
||||
/*
|
||||
@@ -2268,7 +2268,7 @@ _bt_walk_left(Relation rel, Buffer buf, Snapshot snapshot)
|
||||
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;
|
||||
}
|
||||
@@ -2329,7 +2329,7 @@ _bt_get_endpoint(Relation rel, uint32 level, bool rightmost,
|
||||
|
||||
page = BufferGetPage(buf);
|
||||
TestForOldSnapshot(snapshot, rel, page);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
@@ -2349,7 +2349,7 @@ _bt_get_endpoint(Relation rel, uint32 level, bool rightmost,
|
||||
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
|
||||
page = BufferGetPage(buf);
|
||||
TestForOldSnapshot(snapshot, rel, page);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
}
|
||||
|
||||
/* Done? */
|
||||
@@ -2372,7 +2372,7 @@ _bt_get_endpoint(Relation rel, uint32 level, bool rightmost,
|
||||
|
||||
buf = _bt_relandgetbuf(rel, buf, blkno, BT_READ);
|
||||
page = BufferGetPage(buf);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
}
|
||||
|
||||
return buf;
|
||||
@@ -2418,7 +2418,7 @@ _bt_endpoint(IndexScanDesc scan, ScanDirection dir)
|
||||
|
||||
PredicateLockPage(rel, BufferGetBlockNumber(buf), scan->xs_snapshot);
|
||||
page = BufferGetPage(buf);
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
Assert(P_ISLEAF(opaque));
|
||||
|
||||
if (ScanDirectionIsForward(dir))
|
||||
|
@@ -625,7 +625,7 @@ _bt_blnewpage(uint32 level)
|
||||
_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;
|
||||
@@ -1000,9 +1000,9 @@ _bt_buildadd(BTWriteState *wstate, BTPageState *state, IndexTuple itup,
|
||||
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);
|
||||
@@ -1017,8 +1017,8 @@ _bt_buildadd(BTWriteState *wstate, BTPageState *state, IndexTuple itup,
|
||||
* 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;
|
||||
@@ -1125,7 +1125,7 @@ _bt_uppershutdown(BTWriteState *wstate, BTPageState *state)
|
||||
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.
|
||||
|
@@ -152,7 +152,7 @@ _bt_findsplitloc(Relation rel,
|
||||
SplitPoint leftpage,
|
||||
rightpage;
|
||||
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(origpage);
|
||||
opaque = BTPageGetOpaque(origpage);
|
||||
maxoff = PageGetMaxOffsetNumber(origpage);
|
||||
|
||||
/* Total free space available on a btree page, after fixed overhead */
|
||||
|
@@ -1774,7 +1774,7 @@ _bt_killitems(IndexScanDesc scan)
|
||||
}
|
||||
}
|
||||
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
minoff = P_FIRSTDATAKEY(opaque);
|
||||
maxoff = PageGetMaxOffsetNumber(page);
|
||||
|
||||
@@ -2474,7 +2474,7 @@ _bt_check_natts(Relation rel, bool heapkeyspace, Page page, OffsetNumber offnum)
|
||||
{
|
||||
int16 natts = IndexRelationGetNumberOfAttributes(rel);
|
||||
int16 nkeyatts = IndexRelationGetNumberOfKeyAttributes(rel);
|
||||
BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
BTPageOpaque opaque = BTPageGetOpaque(page);
|
||||
IndexTuple itup;
|
||||
int tupnatts;
|
||||
|
||||
@@ -2662,7 +2662,7 @@ _bt_check_third_page(Relation rel, Relation heap, bool needheaptidspace,
|
||||
* 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));
|
||||
|
@@ -115,7 +115,7 @@ _bt_restore_meta(XLogReaderState *record, uint8 block_id)
|
||||
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;
|
||||
|
||||
/*
|
||||
@@ -146,7 +146,7 @@ _bt_clear_incomplete_split(XLogReaderState *record, uint8 block_id)
|
||||
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;
|
||||
@@ -292,7 +292,7 @@ btree_xlog_split(bool newitemonleft, XLogReaderState *record)
|
||||
rpage = (Page) BufferGetPage(rbuf);
|
||||
|
||||
_bt_pageinit(rpage, BufferGetPageSize(rbuf));
|
||||
ropaque = (BTPageOpaque) PageGetSpecialPointer(rpage);
|
||||
ropaque = BTPageGetOpaque(rpage);
|
||||
|
||||
ropaque->btpo_prev = origpagenumber;
|
||||
ropaque->btpo_next = spagenumber;
|
||||
@@ -317,7 +317,7 @@ btree_xlog_split(bool newitemonleft, XLogReaderState *record)
|
||||
* 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,
|
||||
@@ -442,7 +442,7 @@ btree_xlog_split(bool newitemonleft, XLogReaderState *record)
|
||||
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;
|
||||
|
||||
@@ -473,7 +473,7 @@ btree_xlog_dedup(XLogReaderState *record)
|
||||
{
|
||||
char *ptr = XLogRecGetBlockData(record, 0, NULL);
|
||||
Page page = (Page) BufferGetPage(buf);
|
||||
BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
BTPageOpaque opaque = BTPageGetOpaque(page);
|
||||
OffsetNumber offnum,
|
||||
minoff,
|
||||
maxoff;
|
||||
@@ -541,7 +541,7 @@ btree_xlog_dedup(XLogReaderState *record)
|
||||
|
||||
if (P_HAS_GARBAGE(opaque))
|
||||
{
|
||||
BTPageOpaque nopaque = (BTPageOpaque) PageGetSpecialPointer(newpage);
|
||||
BTPageOpaque nopaque = BTPageGetOpaque(newpage);
|
||||
|
||||
nopaque->btpo_flags &= ~BTP_HAS_GARBAGE;
|
||||
}
|
||||
@@ -639,7 +639,7 @@ btree_xlog_vacuum(XLogReaderState *record)
|
||||
* 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);
|
||||
@@ -699,7 +699,7 @@ btree_xlog_delete(XLogReaderState *record)
|
||||
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);
|
||||
@@ -737,7 +737,7 @@ btree_xlog_mark_page_halfdead(uint8 info, XLogReaderState *record)
|
||||
BlockNumber rightsib;
|
||||
|
||||
page = (Page) BufferGetPage(buffer);
|
||||
pageop = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
pageop = BTPageGetOpaque(page);
|
||||
|
||||
poffset = xlrec->poffset;
|
||||
|
||||
@@ -768,7 +768,7 @@ btree_xlog_mark_page_halfdead(uint8 info, XLogReaderState *record)
|
||||
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;
|
||||
@@ -833,7 +833,7 @@ btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
|
||||
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);
|
||||
@@ -848,7 +848,7 @@ btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
|
||||
page = (Page) BufferGetPage(target);
|
||||
|
||||
_bt_pageinit(page, BufferGetPageSize(target));
|
||||
pageop = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
pageop = BTPageGetOpaque(page);
|
||||
|
||||
pageop->btpo_prev = leftsib;
|
||||
pageop->btpo_next = rightsib;
|
||||
@@ -865,7 +865,7 @@ btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
|
||||
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);
|
||||
@@ -906,7 +906,7 @@ btree_xlog_unlink_page(uint8 info, XLogReaderState *record)
|
||||
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;
|
||||
@@ -948,7 +948,7 @@ btree_xlog_newroot(XLogReaderState *record)
|
||||
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;
|
||||
@@ -1097,7 +1097,7 @@ btree_mask(char *pagedata, BlockNumber blkno)
|
||||
mask_page_hint_bits(page);
|
||||
mask_unused_space(page);
|
||||
|
||||
maskopaq = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
maskopaq = BTPageGetOpaque(page);
|
||||
|
||||
if (P_ISLEAF(maskopaq))
|
||||
{
|
||||
|
Reference in New Issue
Block a user