Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit d16773c

Browse files
committed
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
1 parent 73db8f4 commit d16773c

File tree

23 files changed

+186
-182
lines changed

23 files changed

+186
-182
lines changed

contrib/amcheck/verify_nbtree.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -691,7 +691,7 @@ bt_check_level_from_leftmost(BtreeCheckState *state, BtreeLevel level)
691691
state->target = palloc_btree_page(state, state->targetblock);
692692
state->targetlsn = PageGetLSN(state->target);
693693

694-
opaque = (BTPageOpaque) PageGetSpecialPointer(state->target);
694+
opaque = BTPageGetOpaque(state->target);
695695

696696
if (P_IGNORE(opaque))
697697
{
@@ -927,7 +927,7 @@ bt_recheck_sibling_links(BtreeCheckState *state,
927927
LockBuffer(lbuf, BT_READ);
928928
_bt_checkpage(state->rel, lbuf);
929929
page = BufferGetPage(lbuf);
930-
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
930+
opaque = BTPageGetOpaque(page);
931931
if (P_ISDELETED(opaque))
932932
{
933933
/*
@@ -951,7 +951,7 @@ bt_recheck_sibling_links(BtreeCheckState *state,
951951
LockBuffer(newtargetbuf, BT_READ);
952952
_bt_checkpage(state->rel, newtargetbuf);
953953
page = BufferGetPage(newtargetbuf);
954-
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
954+
opaque = BTPageGetOpaque(page);
955955
/* btpo_prev_from_target may have changed; update it */
956956
btpo_prev_from_target = opaque->btpo_prev;
957957
}
@@ -1049,7 +1049,7 @@ bt_target_page_check(BtreeCheckState *state)
10491049
OffsetNumber max;
10501050
BTPageOpaque topaque;
10511051

1052-
topaque = (BTPageOpaque) PageGetSpecialPointer(state->target);
1052+
topaque = BTPageGetOpaque(state->target);
10531053
max = PageGetMaxOffsetNumber(state->target);
10541054

10551055
elog(DEBUG2, "verifying %u items on %s block %u", max,
@@ -1478,7 +1478,7 @@ bt_target_page_check(BtreeCheckState *state)
14781478
/* Get fresh copy of target page */
14791479
state->target = palloc_btree_page(state, state->targetblock);
14801480
/* Note that we deliberately do not update target LSN */
1481-
topaque = (BTPageOpaque) PageGetSpecialPointer(state->target);
1481+
topaque = BTPageGetOpaque(state->target);
14821482

14831483
/*
14841484
* All !readonly checks now performed; just return
@@ -1552,7 +1552,7 @@ bt_right_page_check_scankey(BtreeCheckState *state)
15521552
OffsetNumber nline;
15531553

15541554
/* Determine target's next block number */
1555-
opaque = (BTPageOpaque) PageGetSpecialPointer(state->target);
1555+
opaque = BTPageGetOpaque(state->target);
15561556

15571557
/* If target is already rightmost, no right sibling; nothing to do here */
15581558
if (P_RIGHTMOST(opaque))
@@ -1588,7 +1588,7 @@ bt_right_page_check_scankey(BtreeCheckState *state)
15881588
CHECK_FOR_INTERRUPTS();
15891589

15901590
rightpage = palloc_btree_page(state, targetnext);
1591-
opaque = (BTPageOpaque) PageGetSpecialPointer(rightpage);
1591+
opaque = BTPageGetOpaque(rightpage);
15921592

15931593
if (!P_IGNORE(opaque) || P_RIGHTMOST(opaque))
15941594
break;
@@ -1893,7 +1893,7 @@ bt_child_highkey_check(BtreeCheckState *state,
18931893
else
18941894
page = palloc_btree_page(state, blkno);
18951895

1896-
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
1896+
opaque = BTPageGetOpaque(page);
18971897

18981898
/* The first page we visit at the level should be leftmost */
18991899
if (first && !BlockNumberIsValid(state->prevrightlink) && !P_LEFTMOST(opaque))
@@ -1971,7 +1971,7 @@ bt_child_highkey_check(BtreeCheckState *state,
19711971
else
19721972
pivotkey_offset = target_downlinkoffnum;
19731973

1974-
topaque = (BTPageOpaque) PageGetSpecialPointer(state->target);
1974+
topaque = BTPageGetOpaque(state->target);
19751975

19761976
if (!offset_is_negative_infinity(topaque, pivotkey_offset))
19771977
{
@@ -2128,9 +2128,9 @@ bt_child_check(BtreeCheckState *state, BTScanInsert targetkey,
21282128
* Check all items, rather than checking just the first and trusting that
21292129
* the operator class obeys the transitive law.
21302130
*/
2131-
topaque = (BTPageOpaque) PageGetSpecialPointer(state->target);
2131+
topaque = BTPageGetOpaque(state->target);
21322132
child = palloc_btree_page(state, childblock);
2133-
copaque = (BTPageOpaque) PageGetSpecialPointer(child);
2133+
copaque = BTPageGetOpaque(child);
21342134
maxoffset = PageGetMaxOffsetNumber(child);
21352135

21362136
/*
@@ -2235,7 +2235,7 @@ static void
22352235
bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
22362236
BlockNumber blkno, Page page)
22372237
{
2238-
BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
2238+
BTPageOpaque opaque = BTPageGetOpaque(page);
22392239
ItemId itemid;
22402240
IndexTuple itup;
22412241
Page child;
@@ -2319,7 +2319,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
23192319
CHECK_FOR_INTERRUPTS();
23202320

23212321
child = palloc_btree_page(state, childblk);
2322-
copaque = (BTPageOpaque) PageGetSpecialPointer(child);
2322+
copaque = BTPageGetOpaque(child);
23232323

23242324
if (P_ISLEAF(copaque))
23252325
break;
@@ -2780,7 +2780,7 @@ invariant_l_offset(BtreeCheckState *state, BTScanInsert key,
27802780
bool nonpivot;
27812781

27822782
ritup = (IndexTuple) PageGetItem(state->target, itemid);
2783-
topaque = (BTPageOpaque) PageGetSpecialPointer(state->target);
2783+
topaque = BTPageGetOpaque(state->target);
27842784
nonpivot = P_ISLEAF(topaque) && upperbound >= P_FIRSTDATAKEY(topaque);
27852785

27862786
/* Get number of keys + heap TID for item to the right */
@@ -2895,7 +2895,7 @@ invariant_l_nontarget_offset(BtreeCheckState *state, BTScanInsert key,
28952895
bool nonpivot;
28962896

28972897
child = (IndexTuple) PageGetItem(nontarget, itemid);
2898-
copaque = (BTPageOpaque) PageGetSpecialPointer(nontarget);
2898+
copaque = BTPageGetOpaque(nontarget);
28992899
nonpivot = P_ISLEAF(copaque) && upperbound >= P_FIRSTDATAKEY(copaque);
29002900

29012901
/* Get number of keys + heap TID for child/non-target item */
@@ -2954,7 +2954,7 @@ palloc_btree_page(BtreeCheckState *state, BlockNumber blocknum)
29542954
memcpy(page, BufferGetPage(buffer), BLCKSZ);
29552955
UnlockReleaseBuffer(buffer);
29562956

2957-
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
2957+
opaque = BTPageGetOpaque(page);
29582958

29592959
if (P_ISMETA(opaque) && blocknum != BTREE_METAPAGE)
29602960
ereport(ERROR,

contrib/pageinspect/btreefuncs.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ GetBTPageStatistics(BlockNumber blkno, Buffer buffer, BTPageStat *stat)
9393
Page page = BufferGetPage(buffer);
9494
PageHeader phdr = (PageHeader) page;
9595
OffsetNumber maxoff = PageGetMaxOffsetNumber(page);
96-
BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
96+
BTPageOpaque opaque = BTPageGetOpaque(page);
9797
int item_size = 0;
9898
int off;
9999

@@ -525,7 +525,7 @@ bt_page_items_internal(PG_FUNCTION_ARGS, enum pageinspect_version ext_version)
525525

526526
uargs->offset = FirstOffsetNumber;
527527

528-
opaque = (BTPageOpaque) PageGetSpecialPointer(uargs->page);
528+
opaque = BTPageGetOpaque(uargs->page);
529529

530530
if (!P_ISDELETED(opaque))
531531
fctx->max_calls = PageGetMaxOffsetNumber(uargs->page);
@@ -622,7 +622,7 @@ bt_page_items_bytea(PG_FUNCTION_ARGS)
622622
(int) MAXALIGN(sizeof(BTPageOpaqueData)),
623623
(int) PageGetSpecialSize(uargs->page))));
624624

625-
opaque = (BTPageOpaque) PageGetSpecialPointer(uargs->page);
625+
opaque = BTPageGetOpaque(uargs->page);
626626

627627
if (P_ISMETA(opaque))
628628
ereport(ERROR,

contrib/pageinspect/hashfuncs.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ verify_hash_page(bytea *raw_page, int flags)
7272
(int) MAXALIGN(sizeof(HashPageOpaqueData)),
7373
(int) PageGetSpecialSize(page))));
7474

75-
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
75+
pageopaque = HashPageGetOpaque(page);
7676
if (pageopaque->hasho_page_id != HASHO_PAGE_ID)
7777
ereport(ERROR,
7878
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -154,7 +154,7 @@ static void
154154
GetHashPageStatistics(Page page, HashPageStat *stat)
155155
{
156156
OffsetNumber maxoff = PageGetMaxOffsetNumber(page);
157-
HashPageOpaque opaque = (HashPageOpaque) PageGetSpecialPointer(page);
157+
HashPageOpaque opaque = HashPageGetOpaque(page);
158158
int off;
159159

160160
stat->dead_items = stat->live_items = 0;
@@ -206,7 +206,7 @@ hash_page_type(PG_FUNCTION_ARGS)
206206
type = "unused";
207207
else
208208
{
209-
opaque = (HashPageOpaque) PageGetSpecialPointer(page);
209+
opaque = HashPageGetOpaque(page);
210210

211211
/* page type (flags) */
212212
pagetype = opaque->hasho_flag & LH_PAGE_TYPE;

contrib/pgstattuple/pgstatindex.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ pgstatindex_impl(Relation rel, FunctionCallInfo fcinfo)
281281
LockBuffer(buffer, BUFFER_LOCK_SHARE);
282282

283283
page = BufferGetPage(buffer);
284-
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
284+
opaque = BTPageGetOpaque(page);
285285

286286
/*
287287
* Determine page type, and update totals.
@@ -641,7 +641,7 @@ pgstathashindex(PG_FUNCTION_ARGS)
641641
HashPageOpaque opaque;
642642
int pagetype;
643643

644-
opaque = (HashPageOpaque) PageGetSpecialPointer(page);
644+
opaque = HashPageGetOpaque(page);
645645
pagetype = opaque->hasho_flag & LH_PAGE_TYPE;
646646

647647
if (pagetype == LH_BUCKET_PAGE)

contrib/pgstattuple/pgstattuple.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ pgstat_btree_page(pgstattuple_type *stat, Relation rel, BlockNumber blkno,
415415
{
416416
BTPageOpaque opaque;
417417

418-
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
418+
opaque = BTPageGetOpaque(page);
419419
if (P_IGNORE(opaque))
420420
{
421421
/* deleted or half-dead page */
@@ -452,7 +452,7 @@ pgstat_hash_page(pgstattuple_type *stat, Relation rel, BlockNumber blkno,
452452
{
453453
HashPageOpaque opaque;
454454

455-
opaque = (HashPageOpaque) PageGetSpecialPointer(page);
455+
opaque = HashPageGetOpaque(page);
456456
switch (opaque->hasho_flag & LH_PAGE_TYPE)
457457
{
458458
case LH_UNUSED_PAGE:

src/backend/access/hash/hash.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ hashbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
515515
_hash_checkpage(rel, buf, LH_BUCKET_PAGE);
516516

517517
page = BufferGetPage(buf);
518-
bucket_opaque = (HashPageOpaque) PageGetSpecialPointer(page);
518+
bucket_opaque = HashPageGetOpaque(page);
519519

520520
/*
521521
* 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,
717717
vacuum_delay_point();
718718

719719
page = BufferGetPage(buf);
720-
opaque = (HashPageOpaque) PageGetSpecialPointer(page);
720+
opaque = HashPageGetOpaque(page);
721721

722722
/* Scan each tuple in page */
723723
maxoffno = PageGetMaxOffsetNumber(page);
@@ -884,7 +884,7 @@ hashbucketcleanup(Relation rel, Bucket cur_bucket, Buffer bucket_buf,
884884
Page page;
885885

886886
page = BufferGetPage(bucket_buf);
887-
bucket_opaque = (HashPageOpaque) PageGetSpecialPointer(page);
887+
bucket_opaque = HashPageGetOpaque(page);
888888

889889
/* No ereport(ERROR) until changes are logged */
890890
START_CRIT_SECTION();

src/backend/access/hash/hash_xlog.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ hash_xlog_add_ovfl_page(XLogReaderState *record)
203203
true);
204204
/* update backlink */
205205
ovflpage = BufferGetPage(ovflbuf);
206-
ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage);
206+
ovflopaque = HashPageGetOpaque(ovflpage);
207207
ovflopaque->hasho_prevblkno = leftblk;
208208

209209
PageSetLSN(ovflpage, lsn);
@@ -215,7 +215,7 @@ hash_xlog_add_ovfl_page(XLogReaderState *record)
215215
HashPageOpaque leftopaque;
216216

217217
leftpage = BufferGetPage(leftbuf);
218-
leftopaque = (HashPageOpaque) PageGetSpecialPointer(leftpage);
218+
leftopaque = HashPageGetOpaque(leftpage);
219219
leftopaque->hasho_nextblkno = rightblk;
220220

221221
PageSetLSN(leftpage, lsn);
@@ -342,7 +342,7 @@ hash_xlog_split_allocate_page(XLogReaderState *record)
342342
HashPageOpaque oldopaque;
343343

344344
oldpage = BufferGetPage(oldbuf);
345-
oldopaque = (HashPageOpaque) PageGetSpecialPointer(oldpage);
345+
oldopaque = HashPageGetOpaque(oldpage);
346346

347347
oldopaque->hasho_flag = xlrec->old_bucket_flag;
348348
oldopaque->hasho_prevblkno = xlrec->new_bucket;
@@ -465,7 +465,7 @@ hash_xlog_split_complete(XLogReaderState *record)
465465
HashPageOpaque oldopaque;
466466

467467
oldpage = BufferGetPage(oldbuf);
468-
oldopaque = (HashPageOpaque) PageGetSpecialPointer(oldpage);
468+
oldopaque = HashPageGetOpaque(oldpage);
469469

470470
oldopaque->hasho_flag = xlrec->old_bucket_flag;
471471

@@ -488,7 +488,7 @@ hash_xlog_split_complete(XLogReaderState *record)
488488
HashPageOpaque nopaque;
489489

490490
newpage = BufferGetPage(newbuf);
491-
nopaque = (HashPageOpaque) PageGetSpecialPointer(newpage);
491+
nopaque = HashPageGetOpaque(newpage);
492492

493493
nopaque->hasho_flag = xlrec->new_bucket_flag;
494494

@@ -710,7 +710,7 @@ hash_xlog_squeeze_page(XLogReaderState *record)
710710
*/
711711
if (xldata->is_prev_bucket_same_wrt)
712712
{
713-
HashPageOpaque writeopaque = (HashPageOpaque) PageGetSpecialPointer(writepage);
713+
HashPageOpaque writeopaque = HashPageGetOpaque(writepage);
714714

715715
writeopaque->hasho_nextblkno = xldata->nextblkno;
716716
}
@@ -729,7 +729,7 @@ hash_xlog_squeeze_page(XLogReaderState *record)
729729

730730
_hash_pageinit(ovflpage, BufferGetPageSize(ovflbuf));
731731

732-
ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage);
732+
ovflopaque = HashPageGetOpaque(ovflpage);
733733

734734
ovflopaque->hasho_prevblkno = InvalidBlockNumber;
735735
ovflopaque->hasho_nextblkno = InvalidBlockNumber;
@@ -748,7 +748,7 @@ hash_xlog_squeeze_page(XLogReaderState *record)
748748
XLogReadBufferForRedo(record, 3, &prevbuf) == BLK_NEEDS_REDO)
749749
{
750750
Page prevpage = BufferGetPage(prevbuf);
751-
HashPageOpaque prevopaque = (HashPageOpaque) PageGetSpecialPointer(prevpage);
751+
HashPageOpaque prevopaque = HashPageGetOpaque(prevpage);
752752

753753
prevopaque->hasho_nextblkno = xldata->nextblkno;
754754

@@ -766,7 +766,7 @@ hash_xlog_squeeze_page(XLogReaderState *record)
766766
if (XLogReadBufferForRedo(record, 4, &nextbuf) == BLK_NEEDS_REDO)
767767
{
768768
Page nextpage = BufferGetPage(nextbuf);
769-
HashPageOpaque nextopaque = (HashPageOpaque) PageGetSpecialPointer(nextpage);
769+
HashPageOpaque nextopaque = HashPageGetOpaque(nextpage);
770770

771771
nextopaque->hasho_prevblkno = xldata->prevblkno;
772772

@@ -903,7 +903,7 @@ hash_xlog_delete(XLogReaderState *record)
903903
{
904904
HashPageOpaque pageopaque;
905905

906-
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
906+
pageopaque = HashPageGetOpaque(page);
907907
pageopaque->hasho_flag &= ~LH_PAGE_HAS_DEAD_TUPLES;
908908
}
909909

@@ -933,7 +933,7 @@ hash_xlog_split_cleanup(XLogReaderState *record)
933933

934934
page = (Page) BufferGetPage(buffer);
935935

936-
bucket_opaque = (HashPageOpaque) PageGetSpecialPointer(page);
936+
bucket_opaque = HashPageGetOpaque(page);
937937
bucket_opaque->hasho_flag &= ~LH_BUCKET_NEEDS_SPLIT_CLEANUP;
938938
PageSetLSN(page, lsn);
939939
MarkBufferDirty(buffer);
@@ -1024,7 +1024,7 @@ hash_xlog_vacuum_one_page(XLogReaderState *record)
10241024
* Mark the page as not containing any LP_DEAD items. See comments in
10251025
* _hash_vacuum_one_page() for details.
10261026
*/
1027-
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
1027+
pageopaque = HashPageGetOpaque(page);
10281028
pageopaque->hasho_flag &= ~LH_PAGE_HAS_DEAD_TUPLES;
10291029

10301030
PageSetLSN(page, lsn);
@@ -1116,7 +1116,7 @@ hash_mask(char *pagedata, BlockNumber blkno)
11161116
mask_page_hint_bits(page);
11171117
mask_unused_space(page);
11181118

1119-
opaque = (HashPageOpaque) PageGetSpecialPointer(page);
1119+
opaque = HashPageGetOpaque(page);
11201120

11211121
pagetype = opaque->hasho_flag & LH_PAGE_TYPE;
11221122
if (pagetype == LH_UNUSED_PAGE)

src/backend/access/hash/hashinsert.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ _hash_doinsert(Relation rel, IndexTuple itup, Relation heapRel)
9595
bucket_buf = buf;
9696

9797
page = BufferGetPage(buf);
98-
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
98+
pageopaque = HashPageGetOpaque(page);
9999
bucket = pageopaque->hasho_bucket;
100100

101101
/*
@@ -183,7 +183,7 @@ _hash_doinsert(Relation rel, IndexTuple itup, Relation heapRel)
183183
/* should fit now, given test above */
184184
Assert(PageGetFreeSpace(page) >= itemsz);
185185
}
186-
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
186+
pageopaque = HashPageGetOpaque(page);
187187
Assert((pageopaque->hasho_flag & LH_PAGE_TYPE) == LH_OVERFLOW_PAGE);
188188
Assert(pageopaque->hasho_bucket == bucket);
189189
}
@@ -384,7 +384,7 @@ _hash_vacuum_one_page(Relation rel, Relation hrel, Buffer metabuf, Buffer buf)
384384
* check it. Remember that LH_PAGE_HAS_DEAD_TUPLES is only a hint
385385
* anyway.
386386
*/
387-
pageopaque = (HashPageOpaque) PageGetSpecialPointer(page);
387+
pageopaque = HashPageGetOpaque(page);
388388
pageopaque->hasho_flag &= ~LH_PAGE_HAS_DEAD_TUPLES;
389389

390390
metap = HashPageGetMeta(BufferGetPage(metabuf));

0 commit comments

Comments
 (0)