Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitce96ce6

Browse files
committed
Remove direct uses of ItemPointer.{ip_blkid,ip_posid}
There are no functional changes here; this simply encapsulates knowledgeof the ItemPointerData struct so that a future patch can change thingswithout more breakage.All direct users of ip_blkid and ip_posid are changed to use existingmacros ItemPointerGetBlockNumber and ItemPointerGetOffsetNumberrespectively. For callers where that's inappropriate (because theyAssert that the itempointer is is valid-looking), addItemPointerGetBlockNumberNoCheck and ItemPointerGetOffsetNumberNoCheck,which lack the assertion but are otherwise identical.Author: Pavan DeolaseeDiscussion:https://postgr.es/m/CABOikdNnFon4cJiL=h1mZH3bgUeU+sWHuU4Yr8AB=j3A2p1GiA@mail.gmail.com
1 parenta99f770 commitce96ce6

File tree

12 files changed

+78
-57
lines changed

12 files changed

+78
-57
lines changed

‎contrib/pageinspect/btreefuncs.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,8 +363,8 @@ bt_page_items(PG_FUNCTION_ARGS)
363363
j=0;
364364
values[j++]=psprintf("%d",uargs->offset);
365365
values[j++]=psprintf("(%u,%u)",
366-
BlockIdGetBlockNumber(&(itup->t_tid.ip_blkid)),
367-
itup->t_tid.ip_posid);
366+
ItemPointerGetBlockNumberNoCheck(&itup->t_tid),
367+
ItemPointerGetOffsetNumberNoCheck(&itup->t_tid));
368368
values[j++]=psprintf("%d", (int)IndexTupleSize(itup));
369369
values[j++]=psprintf("%c",IndexTupleHasNulls(itup) ?'t' :'f');
370370
values[j++]=psprintf("%c",IndexTupleHasVarwidths(itup) ?'t' :'f');

‎contrib/pgstattuple/pgstattuple.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ pgstat_heap(Relation rel, FunctionCallInfo fcinfo)
356356
* heap_getnext may find no tuples on a given page, so we cannot
357357
* simply examine the pages returned by the heap scan.
358358
*/
359-
tupblock=BlockIdGetBlockNumber(&tuple->t_self.ip_blkid);
359+
tupblock=ItemPointerGetBlockNumber(&tuple->t_self);
360360

361361
while (block <=tupblock)
362362
{

‎src/backend/access/gin/ginget.c

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -626,8 +626,9 @@ entryLoadMoreItems(GinState *ginstate, GinScanEntry entry,
626626
}
627627
else
628628
{
629-
entry->btree.itemptr=advancePast;
630-
entry->btree.itemptr.ip_posid++;
629+
ItemPointerSet(&entry->btree.itemptr,
630+
GinItemPointerGetBlockNumber(&advancePast),
631+
OffsetNumberNext(GinItemPointerGetOffsetNumber(&advancePast)));
631632
}
632633
entry->btree.fullScan= false;
633634
stack=ginFindLeafPage(&entry->btree, true,snapshot);
@@ -979,15 +980,17 @@ keyGetItem(GinState *ginstate, MemoryContext tempCtx, GinScanKey key,
979980
if (GinItemPointerGetBlockNumber(&advancePast)<
980981
GinItemPointerGetBlockNumber(&minItem))
981982
{
982-
advancePast.ip_blkid=minItem.ip_blkid;
983-
advancePast.ip_posid=0;
983+
ItemPointerSet(&advancePast,
984+
GinItemPointerGetBlockNumber(&minItem),
985+
InvalidOffsetNumber);
984986
}
985987
}
986988
else
987989
{
988-
Assert(minItem.ip_posid>0);
989-
advancePast=minItem;
990-
advancePast.ip_posid--;
990+
Assert(GinItemPointerGetOffsetNumber(&minItem)>0);
991+
ItemPointerSet(&advancePast,
992+
GinItemPointerGetBlockNumber(&minItem),
993+
OffsetNumberPrev(GinItemPointerGetOffsetNumber(&minItem)));
991994
}
992995

993996
/*
@@ -1245,15 +1248,17 @@ scanGetItem(IndexScanDesc scan, ItemPointerData advancePast,
12451248
if (GinItemPointerGetBlockNumber(&advancePast)<
12461249
GinItemPointerGetBlockNumber(&key->curItem))
12471250
{
1248-
advancePast.ip_blkid=key->curItem.ip_blkid;
1249-
advancePast.ip_posid=0;
1251+
ItemPointerSet(&advancePast,
1252+
GinItemPointerGetBlockNumber(&key->curItem),
1253+
InvalidOffsetNumber);
12501254
}
12511255
}
12521256
else
12531257
{
1254-
Assert(key->curItem.ip_posid>0);
1255-
advancePast=key->curItem;
1256-
advancePast.ip_posid--;
1258+
Assert(GinItemPointerGetOffsetNumber(&key->curItem)>0);
1259+
ItemPointerSet(&advancePast,
1260+
GinItemPointerGetBlockNumber(&key->curItem),
1261+
OffsetNumberPrev(GinItemPointerGetOffsetNumber(&key->curItem)));
12571262
}
12581263

12591264
/*

‎src/backend/access/gin/ginpostinglist.c

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,25 +79,21 @@ itemptr_to_uint64(const ItemPointer iptr)
7979
uint64val;
8080

8181
Assert(ItemPointerIsValid(iptr));
82-
Assert(iptr->ip_posid< (1 <<MaxHeapTuplesPerPageBits));
82+
Assert(GinItemPointerGetOffsetNumber(iptr)< (1 <<MaxHeapTuplesPerPageBits));
8383

84-
val=iptr->ip_blkid.bi_hi;
85-
val <<=16;
86-
val |=iptr->ip_blkid.bi_lo;
84+
val=GinItemPointerGetBlockNumber(iptr);
8785
val <<=MaxHeapTuplesPerPageBits;
88-
val |=iptr->ip_posid;
86+
val |=GinItemPointerGetOffsetNumber(iptr);
8987

9088
returnval;
9189
}
9290

9391
staticinlinevoid
9492
uint64_to_itemptr(uint64val,ItemPointeriptr)
9593
{
96-
iptr->ip_posid=val& ((1 <<MaxHeapTuplesPerPageBits)-1);
94+
GinItemPointerSetOffsetNumber(iptr,val& ((1 <<MaxHeapTuplesPerPageBits)-1));
9795
val=val >>MaxHeapTuplesPerPageBits;
98-
iptr->ip_blkid.bi_lo=val&0xFFFF;
99-
val=val >>16;
100-
iptr->ip_blkid.bi_hi=val&0xFFFF;
96+
GinItemPointerSetBlockNumber(iptr,val);
10197

10298
Assert(ItemPointerIsValid(iptr));
10399
}

‎src/backend/replication/logical/reorderbuffer.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3013,8 +3013,8 @@ DisplayMapping(HTAB *tuplecid_data)
30133013
ent->key.relnode.dbNode,
30143014
ent->key.relnode.spcNode,
30153015
ent->key.relnode.relNode,
3016-
BlockIdGetBlockNumber(&ent->key.tid.ip_blkid),
3017-
ent->key.tid.ip_posid,
3016+
ItemPointerGetBlockNumber(&ent->key.tid),
3017+
ItemPointerGetOffsetNumber(&ent->key.tid),
30183018
ent->cmin,
30193019
ent->cmax
30203020
);

‎src/backend/storage/page/itemptr.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,20 +52,21 @@ int32
5252
ItemPointerCompare(ItemPointerarg1,ItemPointerarg2)
5353
{
5454
/*
55-
* Don't use ItemPointerGetBlockNumber or ItemPointerGetOffsetNumber here,
56-
* because they assert ip_posid != 0 which might not be true for a
57-
* user-supplied TID.
55+
* Use ItemPointerGet{Offset,Block}NumberNoCheck to avoid asserting
56+
* ip_posid != 0, which may not be true for a user-supplied TID.
5857
*/
59-
BlockNumberb1=BlockIdGetBlockNumber(&(arg1->ip_blkid));
60-
BlockNumberb2=BlockIdGetBlockNumber(&(arg2->ip_blkid));
58+
BlockNumberb1=ItemPointerGetBlockNumberNoCheck(arg1);
59+
BlockNumberb2=ItemPointerGetBlockNumberNoCheck(arg2);
6160

6261
if (b1<b2)
6362
return-1;
6463
elseif (b1>b2)
6564
return1;
66-
elseif (arg1->ip_posid<arg2->ip_posid)
65+
elseif (ItemPointerGetOffsetNumberNoCheck(arg1)<
66+
ItemPointerGetOffsetNumberNoCheck(arg2))
6767
return-1;
68-
elseif (arg1->ip_posid>arg2->ip_posid)
68+
elseif (ItemPointerGetOffsetNumberNoCheck(arg1)>
69+
ItemPointerGetOffsetNumberNoCheck(arg2))
6970
return1;
7071
else
7172
return0;

‎src/backend/utils/adt/tid.c

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ tidout(PG_FUNCTION_ARGS)
109109
OffsetNumberoffsetNumber;
110110
charbuf[32];
111111

112-
blockNumber=BlockIdGetBlockNumber(&(itemPtr->ip_blkid));
113-
offsetNumber=itemPtr->ip_posid;
112+
blockNumber=ItemPointerGetBlockNumberNoCheck(itemPtr);
113+
offsetNumber=ItemPointerGetOffsetNumberNoCheck(itemPtr);
114114

115115
/* Perhaps someday we should output this as a record. */
116116
snprintf(buf,sizeof(buf),"(%u,%u)",blockNumber,offsetNumber);
@@ -146,18 +146,13 @@ Datum
146146
tidsend(PG_FUNCTION_ARGS)
147147
{
148148
ItemPointeritemPtr=PG_GETARG_ITEMPOINTER(0);
149-
BlockIdblockId;
150-
BlockNumberblockNumber;
151-
OffsetNumberoffsetNumber;
152149
StringInfoDatabuf;
153150

154-
blockId=&(itemPtr->ip_blkid);
155-
blockNumber=BlockIdGetBlockNumber(blockId);
156-
offsetNumber=itemPtr->ip_posid;
157-
158151
pq_begintypsend(&buf);
159-
pq_sendint(&buf,blockNumber,sizeof(blockNumber));
160-
pq_sendint(&buf,offsetNumber,sizeof(offsetNumber));
152+
pq_sendint(&buf,ItemPointerGetBlockNumberNoCheck(itemPtr),
153+
sizeof(BlockNumber));
154+
pq_sendint(&buf,ItemPointerGetOffsetNumberNoCheck(itemPtr),
155+
sizeof(OffsetNumber));
161156
PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
162157
}
163158

‎src/include/access/gin_private.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -460,8 +460,8 @@ extern ItemPointer ginMergeItemPointers(ItemPointerData *a, uint32 na,
460460
staticinlineint
461461
ginCompareItemPointers(ItemPointera,ItemPointerb)
462462
{
463-
uint64ia= (uint64)a->ip_blkid.bi_hi <<32 |(uint64)a->ip_blkid.bi_lo <<16 |a->ip_posid;
464-
uint64ib= (uint64)b->ip_blkid.bi_hi <<32 |(uint64)b->ip_blkid.bi_lo <<16 |b->ip_posid;
463+
uint64ia= (uint64)GinItemPointerGetBlockNumber(a) <<32 |GinItemPointerGetOffsetNumber(a);
464+
uint64ib= (uint64)GinItemPointerGetBlockNumber(b) <<32 |GinItemPointerGetOffsetNumber(b);
465465

466466
if (ia==ib)
467467
return0;
@@ -471,6 +471,6 @@ ginCompareItemPointers(ItemPointer a, ItemPointer b)
471471
return-1;
472472
}
473473

474-
externintginTraverseLock(Bufferbuffer,boolsearchMode);
474+
externintginTraverseLock(Bufferbuffer,boolsearchMode);
475475

476476
#endif/* GIN_PRIVATE_H */

‎src/include/access/ginblock.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,17 @@ typedef struct GinMetaPageData
132132
* to avoid Asserts, since sometimes the ip_posid isn't "valid"
133133
*/
134134
#defineGinItemPointerGetBlockNumber(pointer) \
135-
BlockIdGetBlockNumber(&(pointer)->ip_blkid)
135+
(ItemPointerGetBlockNumberNoCheck(pointer))
136136

137137
#defineGinItemPointerGetOffsetNumber(pointer) \
138-
((pointer)->ip_posid)
138+
(ItemPointerGetOffsetNumberNoCheck(pointer))
139+
140+
#defineGinItemPointerSetBlockNumber(pointer,blkno) \
141+
(ItemPointerSetBlockNumber((pointer), (blkno)))
142+
143+
#defineGinItemPointerSetOffsetNumber(pointer,offnum) \
144+
(ItemPointerSetOffsetNumber((pointer), (offnum)))
145+
139146

140147
/*
141148
* Special-case item pointer values needed by the GIN search logic.

‎src/include/access/htup_details.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ do { \
422422

423423
#defineHeapTupleHeaderIsSpeculative(tup) \
424424
( \
425-
(tup)->t_ctid.ip_posid == SpecTokenOffsetNumber \
425+
(ItemPointerGetOffsetNumberNoCheck(&(tup)->t_ctid) == SpecTokenOffsetNumber) \
426426
)
427427

428428
#defineHeapTupleHeaderGetSpeculativeToken(tup) \

‎src/include/access/nbtree.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,8 @@ typedef struct BTMetaPageData
151151
*within a level). - vadim 04/09/97
152152
*/
153153
#defineBTTidSame(i1,i2)\
154-
( (i1).ip_blkid.bi_hi == (i2).ip_blkid.bi_hi && \
155-
(i1).ip_blkid.bi_lo == (i2).ip_blkid.bi_lo && \
156-
(i1).ip_posid == (i2).ip_posid )
154+
((ItemPointerGetBlockNumber(&(i1)) == ItemPointerGetBlockNumber(&(i2))) && \
155+
(ItemPointerGetOffsetNumber(&(i1)) == ItemPointerGetOffsetNumber(&(i2))))
157156
#defineBTEntrySame(i1,i2) \
158157
BTTidSame((i1)->t_tid, (i2)->t_tid)
159158

‎src/include/storage/itemptr.h

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,23 +60,41 @@ typedef ItemPointerData *ItemPointer;
6060
((bool) (PointerIsValid(pointer) && ((pointer)->ip_posid != 0)))
6161

6262
/*
63-
*ItemPointerGetBlockNumber
63+
*ItemPointerGetBlockNumberNoCheck
6464
*Returns the block number of a disk item pointer.
6565
*/
66+
#defineItemPointerGetBlockNumberNoCheck(pointer) \
67+
( \
68+
BlockIdGetBlockNumber(&(pointer)->ip_blkid) \
69+
)
70+
71+
/*
72+
* ItemPointerGetBlockNumber
73+
*As above, but verifies that the item pointer looks valid.
74+
*/
6675
#defineItemPointerGetBlockNumber(pointer) \
6776
( \
6877
AssertMacro(ItemPointerIsValid(pointer)), \
69-
BlockIdGetBlockNumber(&(pointer)->ip_blkid) \
78+
ItemPointerGetBlockNumberNoCheck(pointer) \
7079
)
7180

7281
/*
73-
*ItemPointerGetOffsetNumber
82+
*ItemPointerGetOffsetNumberNoCheck
7483
*Returns the offset number of a disk item pointer.
7584
*/
85+
#defineItemPointerGetOffsetNumberNoCheck(pointer) \
86+
( \
87+
(pointer)->ip_posid \
88+
)
89+
90+
/*
91+
* ItemPointerGetOffsetNumber
92+
*As above, but verifies that the item pointer looks valid.
93+
*/
7694
#defineItemPointerGetOffsetNumber(pointer) \
7795
( \
7896
AssertMacro(ItemPointerIsValid(pointer)), \
79-
(pointer)->ip_posid \
97+
ItemPointerGetOffsetNumberNoCheck(pointer) \
8098
)
8199

82100
/*

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp