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

Commit33f1687

Browse files
committed
There already was a macro PageGetItemId; this is now used in (almost)
all places, where pd_linp is accessed. Also introduce new macrosSizeOfPageHeaderData and BTMaxItemSize. This is just source codecosmetic, no behaviour changed.Manfred Koizar
1 parent8864603 commit33f1687

File tree

6 files changed

+58
-42
lines changed

6 files changed

+58
-42
lines changed

‎src/backend/access/heap/heapam.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.140 2002/07/02 05:46:14 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.141 2002/07/02 05:48:44 momjian Exp $
1212
*
1313
*
1414
* INTERFACE ROUTINES
@@ -2067,7 +2067,7 @@ heap_xlog_clean(bool redo, XLogRecPtr lsn, XLogRecord *record)
20672067

20682068
while ((char*)unused<unend)
20692069
{
2070-
lp=((PageHeader)page)->pd_linp+*unused;
2070+
lp=PageGetItemId(page,*unused+1);
20712071
lp->lp_flags &= ~LP_USED;
20722072
unused++;
20732073
}

‎src/backend/access/nbtree/nbtinsert.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.93 2002/06/20 20:29:25 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.94 2002/07/02 05:48:44 momjian Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -383,10 +383,9 @@ _bt_insertonpg(Relation rel,
383383
* to 1/3 the per-page available space. Note that at this point,
384384
* itemsz doesn't include the ItemId.
385385
*/
386-
if (itemsz>(PageGetPageSize(page)-sizeof(PageHeaderData)-MAXALIGN(sizeof(BTPageOpaqueData))) /3-sizeof(ItemIdData))
386+
if (itemsz>BTMaxItemSize(page))
387387
elog(ERROR,"btree: index item size %lu exceeds maximum %lu",
388-
(unsigned long)itemsz,
389-
(PageGetPageSize(page)-sizeof(PageHeaderData)-MAXALIGN(sizeof(BTPageOpaqueData))) /3-sizeof(ItemIdData));
388+
(unsigned long)itemsz,BTMaxItemSize(page));
390389

391390
/*
392391
* Determine exactly where new item will go.
@@ -1020,9 +1019,8 @@ _bt_findsplitloc(Relation rel,
10201019

10211020
/* Total free space available on a btree page, after fixed overhead */
10221021
leftspace=rightspace=
1023-
PageGetPageSize(page)-sizeof(PageHeaderData)-
1024-
MAXALIGN(sizeof(BTPageOpaqueData))
1025-
+sizeof(ItemIdData);
1022+
PageGetPageSize(page)-SizeOfPageHeaderData-
1023+
MAXALIGN(sizeof(BTPageOpaqueData));
10261024

10271025
/*
10281026
* Finding the best possible split would require checking all the

‎src/backend/access/nbtree/nbtsort.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
* Portions Copyright (c) 1994, Regents of the University of California
3636
*
3737
* IDENTIFICATION
38-
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtsort.c,v 1.64 2002/06/20 20:29:25 momjian Exp $
38+
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtsort.c,v 1.65 2002/07/02 05:48:44 momjian Exp $
3939
*
4040
*-------------------------------------------------------------------------
4141
*/
@@ -346,10 +346,9 @@ _bt_buildadd(Relation index, BTPageState *state, BTItem bti)
346346
* oversize items being inserted into an already-existing index. But
347347
* during creation of an index, we don't go through there.
348348
*/
349-
if (btisz>(PageGetPageSize(npage)-sizeof(PageHeaderData)-MAXALIGN(sizeof(BTPageOpaqueData))) /3-sizeof(ItemIdData))
349+
if (btisz>BTMaxItemSize(npage))
350350
elog(ERROR,"btree: index item size %lu exceeds maximum %ld",
351-
(unsigned long)btisz,
352-
(PageGetPageSize(npage)-sizeof(PageHeaderData)-MAXALIGN(sizeof(BTPageOpaqueData))) /3-sizeof(ItemIdData));
351+
(unsigned long)btisz,BTMaxItemSize(npage));
353352

354353
if (pgspc<btisz||pgspc<state->btps_full)
355354
{

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

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.45 2002/06/20 20:29:35 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.46 2002/07/02 05:48:44 momjian Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -37,13 +37,12 @@ PageInit(Page page, Size pageSize, Size specialSize)
3737
specialSize=MAXALIGN(specialSize);
3838

3939
Assert(pageSize==BLCKSZ);
40-
Assert(pageSize>
41-
specialSize+sizeof(PageHeaderData)-sizeof(ItemIdData));
40+
Assert(pageSize>specialSize+SizeOfPageHeaderData);
4241

4342
/* Make sure all fields of page are zero, as well as unused space */
4443
MemSet(p,0,pageSize);
4544

46-
p->pd_lower=sizeof(PageHeaderData)-sizeof(ItemIdData);
45+
p->pd_lower=SizeOfPageHeaderData;
4746
p->pd_upper=pageSize-specialSize;
4847
p->pd_special=pageSize-specialSize;
4948
PageSetPageSize(page,pageSize);
@@ -88,7 +87,7 @@ PageAddItem(Page page,
8887
/*
8988
* Be wary about corrupted page pointers
9089
*/
91-
if (phdr->pd_lower<(sizeof(PageHeaderData)-sizeof(ItemIdData))||
90+
if (phdr->pd_lower<SizeOfPageHeaderData||
9291
phdr->pd_lower>phdr->pd_upper||
9392
phdr->pd_upper>phdr->pd_special||
9493
phdr->pd_special>BLCKSZ)
@@ -112,7 +111,7 @@ PageAddItem(Page page,
112111
}
113112
if (offsetNumber<limit)
114113
{
115-
itemId=&phdr->pd_linp[offsetNumber-1];
114+
itemId=PageGetItemId(phdr,offsetNumber);
116115
if (((*itemId).lp_flags&LP_USED)||
117116
((*itemId).lp_len!=0))
118117
{
@@ -136,7 +135,7 @@ PageAddItem(Page page,
136135
/* look for "recyclable" (unused & deallocated) ItemId */
137136
for (offsetNumber=1;offsetNumber<limit;offsetNumber++)
138137
{
139-
itemId=&phdr->pd_linp[offsetNumber-1];
138+
itemId=PageGetItemId(phdr,offsetNumber);
140139
if ((((*itemId).lp_flags&LP_USED)==0)&&
141140
((*itemId).lp_len==0))
142141
break;
@@ -150,7 +149,7 @@ PageAddItem(Page page,
150149
* alignedSize > pd_upper.
151150
*/
152151
if (offsetNumber>limit)
153-
lower= (char*)(&phdr->pd_linp[offsetNumber])- (char*)page;
152+
lower= (char*)PageGetItemId(phdr,offsetNumber+1)- (char*)page;
154153
elseif (offsetNumber==limit||needshuffle)
155154
lower=phdr->pd_lower+sizeof(ItemIdData);
156155
else
@@ -175,13 +174,13 @@ PageAddItem(Page page,
175174
ItemIdfromitemId,
176175
toitemId;
177176

178-
fromitemId=&phdr->pd_linp[i-1];
179-
toitemId=&phdr->pd_linp[i];
177+
fromitemId=PageGetItemId(phdr,i);
178+
toitemId=PageGetItemId(phdr,i+1);
180179
*toitemId=*fromitemId;
181180
}
182181
}
183182

184-
itemId=&phdr->pd_linp[offsetNumber-1];
183+
itemId=PageGetItemId(phdr,offsetNumber);
185184
(*itemId).lp_off=upper;
186185
(*itemId).lp_len=size;
187186
(*itemId).lp_flags=flags;
@@ -214,12 +213,12 @@ PageGetTempPage(Page page, Size specialSize)
214213
memcpy(temp,page,pageSize);
215214

216215
/* clear out the middle */
217-
size=(pageSize-sizeof(PageHeaderData))+sizeof(ItemIdData);
216+
size=pageSize-SizeOfPageHeaderData;
218217
size-=MAXALIGN(specialSize);
219-
MemSet((char*)&(thdr->pd_linp[0]),0,size);
218+
MemSet(PageGetContents(thdr),0,size);
220219

221220
/* set high, low water marks */
222-
thdr->pd_lower=sizeof(PageHeaderData)-sizeof(ItemIdData);
221+
thdr->pd_lower=SizeOfPageHeaderData;
223222
thdr->pd_upper=pageSize-MAXALIGN(specialSize);
224223

225224
returntemp;
@@ -291,7 +290,7 @@ PageRepairFragmentation(Page page, OffsetNumber *unused)
291290
* pointers, lengths, etc could cause us to clobber adjacent disk
292291
* buffers, spreading the data loss further. So, check everything.
293292
*/
294-
if (pd_lower<(sizeof(PageHeaderData)-sizeof(ItemIdData))||
293+
if (pd_lower<SizeOfPageHeaderData||
295294
pd_lower>pd_upper||
296295
pd_upper>pd_special||
297296
pd_special>BLCKSZ||
@@ -303,7 +302,7 @@ PageRepairFragmentation(Page page, OffsetNumber *unused)
303302
nused=0;
304303
for (i=0;i<nline;i++)
305304
{
306-
lp=((PageHeader)page)->pd_linp+i;
305+
lp=PageGetItemId(page,i+1);
307306
if ((*lp).lp_flags&LP_DELETE)/* marked for deletion */
308307
(*lp).lp_flags &= ~(LP_USED |LP_DELETE);
309308
if ((*lp).lp_flags&LP_USED)
@@ -317,7 +316,7 @@ PageRepairFragmentation(Page page, OffsetNumber *unused)
317316
/* Page is completely empty, so just reset it quickly */
318317
for (i=0;i<nline;i++)
319318
{
320-
lp=((PageHeader)page)->pd_linp+i;
319+
lp=PageGetItemId(page,i+1);
321320
(*lp).lp_len=0;/* indicate unused & deallocated */
322321
}
323322
((PageHeader)page)->pd_upper=pd_special;
@@ -331,7 +330,7 @@ PageRepairFragmentation(Page page, OffsetNumber *unused)
331330
totallen=0;
332331
for (i=0;i<nline;i++)
333332
{
334-
lp=((PageHeader)page)->pd_linp+i;
333+
lp=PageGetItemId(page,i+1);
335334
if ((*lp).lp_flags&LP_USED)
336335
{
337336
itemidptr->offsetindex=i;
@@ -363,7 +362,7 @@ PageRepairFragmentation(Page page, OffsetNumber *unused)
363362

364363
for (i=0,itemidptr=itemidbase;i<nused;i++,itemidptr++)
365364
{
366-
lp=((PageHeader)page)->pd_linp+itemidptr->offsetindex;
365+
lp=PageGetItemId(page,itemidptr->offsetindex+1);
367366
upper-=itemidptr->alignedlen;
368367
memmove((char*)page+upper,
369368
(char*)page+itemidptr->itemoff,
@@ -426,7 +425,7 @@ PageIndexTupleDelete(Page page, OffsetNumber offnum)
426425
/*
427426
* As with PageRepairFragmentation, paranoia seems justified.
428427
*/
429-
if (phdr->pd_lower<(sizeof(PageHeaderData)-sizeof(ItemIdData))||
428+
if (phdr->pd_lower<SizeOfPageHeaderData||
430429
phdr->pd_lower>phdr->pd_upper||
431430
phdr->pd_upper>phdr->pd_special||
432431
phdr->pd_special>BLCKSZ)
@@ -452,6 +451,8 @@ PageIndexTupleDelete(Page page, OffsetNumber offnum)
452451
/*
453452
* First, we want to get rid of the pd_linp entry for the index tuple.
454453
* We copy all subsequent linp's back one slot in the array.
454+
* We don't use PageGetItemId, because we are manipulating the _array_,
455+
* not individual linp's.
455456
*/
456457
nbytes=phdr->pd_lower-
457458
((char*)&phdr->pd_linp[offidx+1]- (char*)phdr);
@@ -490,8 +491,8 @@ PageIndexTupleDelete(Page page, OffsetNumber offnum)
490491
nline--;/* there's one less than when we started */
491492
for (i=nline;--i >=0; )
492493
{
493-
if (phdr->pd_linp[i].lp_off <=offset)
494-
phdr->pd_linp[i].lp_off+=size;
494+
if (PageGetItemId(phdr,i+1)->lp_off <=offset)
495+
PageGetItemId(phdr,i+1)->lp_off+=size;
495496
}
496497
}
497498
}

‎src/include/access/nbtree.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $Id: nbtree.h,v 1.62 2002/06/20 20:29:43 momjian Exp $
10+
* $Id: nbtree.h,v 1.63 2002/07/02 05:48:44 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -65,7 +65,7 @@ typedef struct BTMetaPageData
6565
}BTMetaPageData;
6666

6767
#defineBTPageGetMeta(p) \
68-
((BTMetaPageData *)&((PageHeader) p)->pd_linp[0])
68+
((BTMetaPageData *)PageGetContents(p))
6969

7070
#defineBTREE_METAPAGE0/* first page is meta */
7171
#defineBTREE_MAGIC0x053162/* magic number of btree pages */
@@ -76,6 +76,14 @@ typedef struct BTMetaPageData
7676

7777
#defineBTREE_VERSION1
7878

79+
/*
80+
* We actually need to be able to fit three items on every page,
81+
* so restrict any one item to 1/3 the per-page available space.
82+
*/
83+
#defineBTMaxItemSize(page) \
84+
((PageGetPageSize(page) - \
85+
sizeof(PageHeaderData) - \
86+
MAXALIGN(sizeof(BTPageOpaqueData))) / 3 - sizeof(ItemIdData))
7987
/*
8088
*BTScanOpaqueData is used to remember which buffers we're currently
8189
*examining in the scan.We keep these buffers pinned (but not locked,

‎src/include/storage/bufpage.h

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $Id: bufpage.h,v 1.48 2002/06/20 20:29:52 momjian Exp $
10+
* $Id: bufpage.h,v 1.49 2002/07/02 05:48:44 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -157,13 +157,17 @@ typedef enum
157157
((bool) (((PageHeader) (page))->pd_lower != 0)) \
158158
)
159159

160+
/*
161+
* line pointer does not count as part of header
162+
*/
163+
#defineSizeOfPageHeaderData (offsetof(PageHeaderData, pd_linp[0]))
164+
160165
/*
161166
* PageIsEmpty
162167
*returns true iff no itemid has been allocated on the page
163168
*/
164169
#definePageIsEmpty(page) \
165-
(((PageHeader) (page))->pd_lower <= \
166-
(sizeof(PageHeaderData) - sizeof(ItemIdData)))
170+
(((PageHeader) (page))->pd_lower <= SizeOfPageHeaderData)
167171

168172
/*
169173
* PageIsNew
@@ -179,6 +183,13 @@ typedef enum
179183
#definePageGetItemId(page,offsetNumber) \
180184
((ItemId) (&((PageHeader) (page))->pd_linp[(offsetNumber) - 1]))
181185

186+
/*
187+
* PageGetContents
188+
*To be used in case the page does not contain item pointers.
189+
*/
190+
#definePageGetContents(page) \
191+
((char *) (&((PageHeader) (page))->pd_linp[0]))
192+
182193
/* ----------------
183194
*macros to access opaque space
184195
* ----------------
@@ -290,8 +301,7 @@ typedef enum
290301
*That way we get -1 or so, not a huge positive number...
291302
*/
292303
#definePageGetMaxOffsetNumber(page) \
293-
(((int) (((PageHeader) (page))->pd_lower - \
294-
(sizeof(PageHeaderData) - sizeof(ItemIdData)))) \
304+
(((int) (((PageHeader) (page))->pd_lower - SizeOfPageHeaderData)) \
295305
/ ((int) sizeof(ItemIdData)))
296306

297307
#definePageGetLSN(page) \

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp