Skip to content

Commit 4f4a1d8

Browse files
committed
Add const qualifiers to bufpage.h
This makes use of the new PageData type. PageGetSpecialPointer() had to be turned back into a macro, because it is used in a way that sometimes it takes const and returns const and sometimes takes non-const and returns non-const. Discussion: https://www.postgresql.org/message-id/flat/692ee0da-49da-4d32-8dca-da224cc2800e@eisentraut.org
1 parent 6e4df23 commit 4f4a1d8

File tree

2 files changed

+53
-54
lines changed

2 files changed

+53
-54
lines changed

src/backend/storage/page/bufpage.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ PageInit(Page page, Size pageSize, Size specialSize)
8585
* to pgstat.
8686
*/
8787
bool
88-
PageIsVerifiedExtended(Page page, BlockNumber blkno, int flags)
88+
PageIsVerifiedExtended(const PageData *page, BlockNumber blkno, int flags)
8989
{
90-
PageHeader p = (PageHeader) page;
90+
const PageHeaderData *p = (const PageHeaderData *) page;
9191
size_t *pagebytes;
9292
bool checksum_failure = false;
9393
bool header_sane = false;
@@ -351,7 +351,7 @@ PageAddItemExtended(Page page,
351351
* The returned page is not initialized at all; caller must do that.
352352
*/
353353
Page
354-
PageGetTempPage(Page page)
354+
PageGetTempPage(const PageData *page)
355355
{
356356
Size pageSize;
357357
Page temp;
@@ -368,7 +368,7 @@ PageGetTempPage(Page page)
368368
* The page is initialized by copying the contents of the given page.
369369
*/
370370
Page
371-
PageGetTempPageCopy(Page page)
371+
PageGetTempPageCopy(const PageData *page)
372372
{
373373
Size pageSize;
374374
Page temp;
@@ -388,7 +388,7 @@ PageGetTempPageCopy(Page page)
388388
* given page, and the special space is copied from the given page.
389389
*/
390390
Page
391-
PageGetTempPageCopySpecial(Page page)
391+
PageGetTempPageCopySpecial(const PageData *page)
392392
{
393393
Size pageSize;
394394
Page temp;
@@ -893,16 +893,16 @@ PageTruncateLinePointerArray(Page page)
893893
* PageGetHeapFreeSpace on heap pages.
894894
*/
895895
Size
896-
PageGetFreeSpace(Page page)
896+
PageGetFreeSpace(const PageData *page)
897897
{
898+
const PageHeaderData *phdr = (const PageHeaderData *) page;
898899
int space;
899900

900901
/*
901902
* Use signed arithmetic here so that we behave sensibly if pd_lower >
902903
* pd_upper.
903904
*/
904-
space = (int) ((PageHeader) page)->pd_upper -
905-
(int) ((PageHeader) page)->pd_lower;
905+
space = (int) phdr->pd_upper - (int) phdr->pd_lower;
906906

907907
if (space < (int) sizeof(ItemIdData))
908908
return 0;
@@ -920,16 +920,16 @@ PageGetFreeSpace(Page page)
920920
* PageGetHeapFreeSpace on heap pages.
921921
*/
922922
Size
923-
PageGetFreeSpaceForMultipleTuples(Page page, int ntups)
923+
PageGetFreeSpaceForMultipleTuples(const PageData *page, int ntups)
924924
{
925+
const PageHeaderData *phdr = (const PageHeaderData *) page;
925926
int space;
926927

927928
/*
928929
* Use signed arithmetic here so that we behave sensibly if pd_lower >
929930
* pd_upper.
930931
*/
931-
space = (int) ((PageHeader) page)->pd_upper -
932-
(int) ((PageHeader) page)->pd_lower;
932+
space = (int) phdr->pd_upper - (int) phdr->pd_lower;
933933

934934
if (space < (int) (ntups * sizeof(ItemIdData)))
935935
return 0;
@@ -944,16 +944,16 @@ PageGetFreeSpaceForMultipleTuples(Page page, int ntups)
944944
* without any consideration for adding/removing line pointers.
945945
*/
946946
Size
947-
PageGetExactFreeSpace(Page page)
947+
PageGetExactFreeSpace(const PageData *page)
948948
{
949+
const PageHeaderData *phdr = (const PageHeaderData *) page;
949950
int space;
950951

951952
/*
952953
* Use signed arithmetic here so that we behave sensibly if pd_lower >
953954
* pd_upper.
954955
*/
955-
space = (int) ((PageHeader) page)->pd_upper -
956-
(int) ((PageHeader) page)->pd_lower;
956+
space = (int) phdr->pd_upper - (int) phdr->pd_lower;
957957

958958
if (space < 0)
959959
return 0;
@@ -977,7 +977,7 @@ PageGetExactFreeSpace(Page page)
977977
* on the number of line pointers, we make this extra check.)
978978
*/
979979
Size
980-
PageGetHeapFreeSpace(Page page)
980+
PageGetHeapFreeSpace(const PageData *page)
981981
{
982982
Size space;
983983

@@ -1001,7 +1001,7 @@ PageGetHeapFreeSpace(Page page)
10011001
*/
10021002
for (offnum = FirstOffsetNumber; offnum <= nline; offnum = OffsetNumberNext(offnum))
10031003
{
1004-
ItemId lp = PageGetItemId(page, offnum);
1004+
ItemId lp = PageGetItemId(unconstify(PageData *, page), offnum);
10051005

10061006
if (!ItemIdIsUsed(lp))
10071007
break;

src/include/storage/bufpage.h

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -222,19 +222,19 @@ typedef PageHeaderData *PageHeader;
222222
* returns true iff no itemid has been allocated on the page
223223
*/
224224
static inline bool
225-
PageIsEmpty(Page page)
225+
PageIsEmpty(const PageData *page)
226226
{
227-
return ((PageHeader) page)->pd_lower <= SizeOfPageHeaderData;
227+
return ((const PageHeaderData *) page)->pd_lower <= SizeOfPageHeaderData;
228228
}
229229

230230
/*
231231
* PageIsNew
232232
* returns true iff page has not been initialized (by PageInit)
233233
*/
234234
static inline bool
235-
PageIsNew(Page page)
235+
PageIsNew(const PageData *page)
236236
{
237-
return ((PageHeader) page)->pd_upper == 0;
237+
return ((const PageHeaderData *) page)->pd_upper == 0;
238238
}
239239

240240
/*
@@ -275,19 +275,19 @@ PageGetContents(Page page)
275275
* however, it can be called on a page that is not stored in a buffer.
276276
*/
277277
static inline Size
278-
PageGetPageSize(Page page)
278+
PageGetPageSize(const PageData *page)
279279
{
280-
return (Size) (((PageHeader) page)->pd_pagesize_version & (uint16) 0xFF00);
280+
return (Size) (((const PageHeaderData *) page)->pd_pagesize_version & (uint16) 0xFF00);
281281
}
282282

283283
/*
284284
* PageGetPageLayoutVersion
285285
* Returns the page layout version of a page.
286286
*/
287287
static inline uint8
288-
PageGetPageLayoutVersion(Page page)
288+
PageGetPageLayoutVersion(const PageData *page)
289289
{
290-
return (((PageHeader) page)->pd_pagesize_version & 0x00FF);
290+
return (((const PageHeaderData *) page)->pd_pagesize_version & 0x00FF);
291291
}
292292

293293
/*
@@ -315,9 +315,9 @@ PageSetPageSizeAndVersion(Page page, Size size, uint8 version)
315315
* Returns size of special space on a page.
316316
*/
317317
static inline uint16
318-
PageGetSpecialSize(Page page)
318+
PageGetSpecialSize(const PageData *page)
319319
{
320-
return (PageGetPageSize(page) - ((PageHeader) page)->pd_special);
320+
return (PageGetPageSize(page) - ((const PageHeaderData *) page)->pd_special);
321321
}
322322

323323
/*
@@ -326,23 +326,22 @@ PageGetSpecialSize(Page page)
326326
* This is intended to catch use of the pointer before page initialization.
327327
*/
328328
static inline void
329-
PageValidateSpecialPointer(Page page)
329+
PageValidateSpecialPointer(const PageData *page)
330330
{
331331
Assert(page);
332-
Assert(((PageHeader) page)->pd_special <= BLCKSZ);
333-
Assert(((PageHeader) page)->pd_special >= SizeOfPageHeaderData);
332+
Assert(((const PageHeaderData *) page)->pd_special <= BLCKSZ);
333+
Assert(((const PageHeaderData *) page)->pd_special >= SizeOfPageHeaderData);
334334
}
335335

336336
/*
337337
* PageGetSpecialPointer
338338
* Returns pointer to special space on a page.
339339
*/
340-
static inline char *
341-
PageGetSpecialPointer(Page page)
342-
{
343-
PageValidateSpecialPointer(page);
344-
return (char *) page + ((PageHeader) page)->pd_special;
345-
}
340+
#define PageGetSpecialPointer(page) \
341+
( \
342+
PageValidateSpecialPointer(page), \
343+
((page) + ((PageHeader) (page))->pd_special) \
344+
)
346345

347346
/*
348347
* PageGetItem
@@ -353,12 +352,12 @@ PageGetSpecialPointer(Page page)
353352
* The semantics may change in the future.
354353
*/
355354
static inline Item
356-
PageGetItem(Page page, ItemId itemId)
355+
PageGetItem(const PageData *page, const ItemIdData *itemId)
357356
{
358357
Assert(page);
359358
Assert(ItemIdHasStorage(itemId));
360359

361-
return (Item) (((char *) page) + ItemIdGetOffset(itemId));
360+
return (Item) (((const char *) page) + ItemIdGetOffset(itemId));
362361
}
363362

364363
/*
@@ -371,9 +370,9 @@ PageGetItem(Page page, ItemId itemId)
371370
* return zero to ensure sane behavior.
372371
*/
373372
static inline OffsetNumber
374-
PageGetMaxOffsetNumber(Page page)
373+
PageGetMaxOffsetNumber(const PageData *page)
375374
{
376-
PageHeader pageheader = (PageHeader) page;
375+
const PageHeaderData *pageheader = (const PageHeaderData *) page;
377376

378377
if (pageheader->pd_lower <= SizeOfPageHeaderData)
379378
return 0;
@@ -385,7 +384,7 @@ PageGetMaxOffsetNumber(Page page)
385384
* Additional functions for access to page headers.
386385
*/
387386
static inline XLogRecPtr
388-
PageGetLSN(const char *page)
387+
PageGetLSN(const PageData *page)
389388
{
390389
return PageXLogRecPtrGet(((const PageHeaderData *) page)->pd_lsn);
391390
}
@@ -396,9 +395,9 @@ PageSetLSN(Page page, XLogRecPtr lsn)
396395
}
397396

398397
static inline bool
399-
PageHasFreeLinePointers(Page page)
398+
PageHasFreeLinePointers(const PageData *page)
400399
{
401-
return ((PageHeader) page)->pd_flags & PD_HAS_FREE_LINES;
400+
return ((const PageHeaderData *) page)->pd_flags & PD_HAS_FREE_LINES;
402401
}
403402
static inline void
404403
PageSetHasFreeLinePointers(Page page)
@@ -412,9 +411,9 @@ PageClearHasFreeLinePointers(Page page)
412411
}
413412

414413
static inline bool
415-
PageIsFull(Page page)
414+
PageIsFull(const PageData *page)
416415
{
417-
return ((PageHeader) page)->pd_flags & PD_PAGE_FULL;
416+
return ((const PageHeaderData *) page)->pd_flags & PD_PAGE_FULL;
418417
}
419418
static inline void
420419
PageSetFull(Page page)
@@ -428,9 +427,9 @@ PageClearFull(Page page)
428427
}
429428

430429
static inline bool
431-
PageIsAllVisible(Page page)
430+
PageIsAllVisible(const PageData *page)
432431
{
433-
return ((PageHeader) page)->pd_flags & PD_ALL_VISIBLE;
432+
return ((const PageHeaderData *) page)->pd_flags & PD_ALL_VISIBLE;
434433
}
435434
static inline void
436435
PageSetAllVisible(Page page)
@@ -490,19 +489,19 @@ StaticAssertDecl(BLCKSZ == ((BLCKSZ / sizeof(size_t)) * sizeof(size_t)),
490489
"BLCKSZ has to be a multiple of sizeof(size_t)");
491490

492491
extern void PageInit(Page page, Size pageSize, Size specialSize);
493-
extern bool PageIsVerifiedExtended(Page page, BlockNumber blkno, int flags);
492+
extern bool PageIsVerifiedExtended(const PageData *page, BlockNumber blkno, int flags);
494493
extern OffsetNumber PageAddItemExtended(Page page, Item item, Size size,
495494
OffsetNumber offsetNumber, int flags);
496-
extern Page PageGetTempPage(Page page);
497-
extern Page PageGetTempPageCopy(Page page);
498-
extern Page PageGetTempPageCopySpecial(Page page);
495+
extern Page PageGetTempPage(const PageData *page);
496+
extern Page PageGetTempPageCopy(const PageData *page);
497+
extern Page PageGetTempPageCopySpecial(const PageData *page);
499498
extern void PageRestoreTempPage(Page tempPage, Page oldPage);
500499
extern void PageRepairFragmentation(Page page);
501500
extern void PageTruncateLinePointerArray(Page page);
502-
extern Size PageGetFreeSpace(Page page);
503-
extern Size PageGetFreeSpaceForMultipleTuples(Page page, int ntups);
504-
extern Size PageGetExactFreeSpace(Page page);
505-
extern Size PageGetHeapFreeSpace(Page page);
501+
extern Size PageGetFreeSpace(const PageData *page);
502+
extern Size PageGetFreeSpaceForMultipleTuples(const PageData *page, int ntups);
503+
extern Size PageGetExactFreeSpace(const PageData *page);
504+
extern Size PageGetHeapFreeSpace(const PageData *page);
506505
extern void PageIndexTupleDelete(Page page, OffsetNumber offnum);
507506
extern void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems);
508507
extern void PageIndexTupleDeleteNoCompact(Page page, OffsetNumber offnum);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy