1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

Convert macros to static inline functions (bufpage.h)

Remove PageIsValid() and PageSizeIsValid(), which weren't used and
seem unnecessary.

Some code using these formerly-macros needs some adjustments because
it was previously playing loose with the Page vs. PageHeader types,
which is no longer possible with the functions instead of macros.

Reviewed-by: Amul Sul <sulamul@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/5b558da8-99fb-0a99-83dd-f72f05388517%40enterprisedb.com
This commit is contained in:
Peter Eisentraut
2022-07-11 07:20:35 +02:00
parent eed959a457
commit 2cd2569c72
5 changed files with 179 additions and 118 deletions

View File

@ -254,7 +254,8 @@ page_header(PG_FUNCTION_ARGS)
Datum values[9]; Datum values[9];
bool nulls[9]; bool nulls[9];
PageHeader page; Page page;
PageHeader pageheader;
XLogRecPtr lsn; XLogRecPtr lsn;
if (!superuser()) if (!superuser())
@ -262,7 +263,8 @@ page_header(PG_FUNCTION_ARGS)
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
errmsg("must be superuser to use raw page functions"))); errmsg("must be superuser to use raw page functions")));
page = (PageHeader) get_page_from_raw(raw_page); page = get_page_from_raw(raw_page);
pageheader = (PageHeader) page;
/* Build a tuple descriptor for our result type */ /* Build a tuple descriptor for our result type */
if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
@ -282,8 +284,8 @@ page_header(PG_FUNCTION_ARGS)
} }
else else
values[0] = LSNGetDatum(lsn); values[0] = LSNGetDatum(lsn);
values[1] = UInt16GetDatum(page->pd_checksum); values[1] = UInt16GetDatum(pageheader->pd_checksum);
values[2] = UInt16GetDatum(page->pd_flags); values[2] = UInt16GetDatum(pageheader->pd_flags);
/* pageinspect >= 1.10 uses int4 instead of int2 for those fields */ /* pageinspect >= 1.10 uses int4 instead of int2 for those fields */
switch (TupleDescAttr(tupdesc, 3)->atttypid) switch (TupleDescAttr(tupdesc, 3)->atttypid)
@ -292,18 +294,18 @@ page_header(PG_FUNCTION_ARGS)
Assert(TupleDescAttr(tupdesc, 4)->atttypid == INT2OID && Assert(TupleDescAttr(tupdesc, 4)->atttypid == INT2OID &&
TupleDescAttr(tupdesc, 5)->atttypid == INT2OID && TupleDescAttr(tupdesc, 5)->atttypid == INT2OID &&
TupleDescAttr(tupdesc, 6)->atttypid == INT2OID); TupleDescAttr(tupdesc, 6)->atttypid == INT2OID);
values[3] = UInt16GetDatum(page->pd_lower); values[3] = UInt16GetDatum(pageheader->pd_lower);
values[4] = UInt16GetDatum(page->pd_upper); values[4] = UInt16GetDatum(pageheader->pd_upper);
values[5] = UInt16GetDatum(page->pd_special); values[5] = UInt16GetDatum(pageheader->pd_special);
values[6] = UInt16GetDatum(PageGetPageSize(page)); values[6] = UInt16GetDatum(PageGetPageSize(page));
break; break;
case INT4OID: case INT4OID:
Assert(TupleDescAttr(tupdesc, 4)->atttypid == INT4OID && Assert(TupleDescAttr(tupdesc, 4)->atttypid == INT4OID &&
TupleDescAttr(tupdesc, 5)->atttypid == INT4OID && TupleDescAttr(tupdesc, 5)->atttypid == INT4OID &&
TupleDescAttr(tupdesc, 6)->atttypid == INT4OID); TupleDescAttr(tupdesc, 6)->atttypid == INT4OID);
values[3] = Int32GetDatum(page->pd_lower); values[3] = Int32GetDatum(pageheader->pd_lower);
values[4] = Int32GetDatum(page->pd_upper); values[4] = Int32GetDatum(pageheader->pd_upper);
values[5] = Int32GetDatum(page->pd_special); values[5] = Int32GetDatum(pageheader->pd_special);
values[6] = Int32GetDatum(PageGetPageSize(page)); values[6] = Int32GetDatum(PageGetPageSize(page));
break; break;
default: default:
@ -312,7 +314,7 @@ page_header(PG_FUNCTION_ARGS)
} }
values[7] = UInt16GetDatum(PageGetPageLayoutVersion(page)); values[7] = UInt16GetDatum(PageGetPageLayoutVersion(page));
values[8] = TransactionIdGetDatum(page->pd_prune_xid); values[8] = TransactionIdGetDatum(pageheader->pd_prune_xid);
/* Build and return the tuple. */ /* Build and return the tuple. */

View File

@ -230,7 +230,7 @@ PageAddItemExtended(Page page,
{ {
if (offsetNumber < limit) if (offsetNumber < limit)
{ {
itemId = PageGetItemId(phdr, offsetNumber); itemId = PageGetItemId(page, offsetNumber);
if (ItemIdIsUsed(itemId) || ItemIdHasStorage(itemId)) if (ItemIdIsUsed(itemId) || ItemIdHasStorage(itemId))
{ {
elog(WARNING, "will not overwrite a used ItemId"); elog(WARNING, "will not overwrite a used ItemId");
@ -248,7 +248,7 @@ PageAddItemExtended(Page page,
{ {
/* offsetNumber was not passed in, so find a free slot */ /* offsetNumber was not passed in, so find a free slot */
/* if no free slot, we'll put it at limit (1st open slot) */ /* if no free slot, we'll put it at limit (1st open slot) */
if (PageHasFreeLinePointers(phdr)) if (PageHasFreeLinePointers(page))
{ {
/* /*
* Scan line pointer array to locate a "recyclable" (unused) * Scan line pointer array to locate a "recyclable" (unused)
@ -262,7 +262,7 @@ PageAddItemExtended(Page page,
offsetNumber < limit; /* limit is maxoff+1 */ offsetNumber < limit; /* limit is maxoff+1 */
offsetNumber++) offsetNumber++)
{ {
itemId = PageGetItemId(phdr, offsetNumber); itemId = PageGetItemId(page, offsetNumber);
/* /*
* We check for no storage as well, just to be paranoid; * We check for no storage as well, just to be paranoid;
@ -277,7 +277,7 @@ PageAddItemExtended(Page page,
if (offsetNumber >= limit) if (offsetNumber >= limit)
{ {
/* the hint is wrong, so reset it */ /* the hint is wrong, so reset it */
PageClearHasFreeLinePointers(phdr); PageClearHasFreeLinePointers(page);
} }
} }
else else
@ -322,7 +322,7 @@ PageAddItemExtended(Page page,
/* /*
* OK to insert the item. First, shuffle the existing pointers if needed. * OK to insert the item. First, shuffle the existing pointers if needed.
*/ */
itemId = PageGetItemId(phdr, offsetNumber); itemId = PageGetItemId(page, offsetNumber);
if (needshuffle) if (needshuffle)
memmove(itemId + 1, itemId, memmove(itemId + 1, itemId,
@ -1004,7 +1004,7 @@ PageGetHeapFreeSpace(Page page)
nline = PageGetMaxOffsetNumber(page); nline = PageGetMaxOffsetNumber(page);
if (nline >= MaxHeapTuplesPerPage) if (nline >= MaxHeapTuplesPerPage)
{ {
if (PageHasFreeLinePointers((PageHeader) page)) if (PageHasFreeLinePointers(page))
{ {
/* /*
* Since this is just a hint, we must confirm that there is * Since this is just a hint, we must confirm that there is
@ -1139,7 +1139,7 @@ PageIndexTupleDelete(Page page, OffsetNumber offnum)
nline--; /* there's one less than when we started */ nline--; /* there's one less than when we started */
for (i = 1; i <= nline; i++) for (i = 1; i <= nline; i++)
{ {
ItemId ii = PageGetItemId(phdr, i); ItemId ii = PageGetItemId(page, i);
Assert(ItemIdHasStorage(ii)); Assert(ItemIdHasStorage(ii));
if (ItemIdGetOffset(ii) <= offset) if (ItemIdGetOffset(ii) <= offset)
@ -1374,7 +1374,7 @@ PageIndexTupleDeleteNoCompact(Page page, OffsetNumber offnum)
for (i = 1; i <= nline; i++) for (i = 1; i <= nline; i++)
{ {
ItemId ii = PageGetItemId(phdr, i); ItemId ii = PageGetItemId(page, i);
if (ItemIdHasStorage(ii) && ItemIdGetOffset(ii) <= offset) if (ItemIdHasStorage(ii) && ItemIdGetOffset(ii) <= offset)
ii->lp_off += size; ii->lp_off += size;
@ -1473,7 +1473,7 @@ PageIndexTupleOverwrite(Page page, OffsetNumber offnum,
/* adjust affected line pointers too */ /* adjust affected line pointers too */
for (i = FirstOffsetNumber; i <= itemcount; i++) for (i = FirstOffsetNumber; i <= itemcount; i++)
{ {
ItemId ii = PageGetItemId(phdr, i); ItemId ii = PageGetItemId(page, i);
/* Allow items without storage; currently only BRIN needs that */ /* Allow items without storage; currently only BRIN needs that */
if (ItemIdHasStorage(ii) && ItemIdGetOffset(ii) <= offset) if (ItemIdHasStorage(ii) && ItemIdGetOffset(ii) <= offset)

View File

@ -228,7 +228,7 @@ scan_file(const char *fn, int segmentno)
current_size += r; current_size += r;
/* New pages have no checksum yet */ /* New pages have no checksum yet */
if (PageIsNew(header)) if (PageIsNew(buf.data))
continue; continue;
csum = pg_checksum_page(buf.data, blockno + segmentno * RELSEG_SIZE); csum = pg_checksum_page(buf.data, blockno + segmentno * RELSEG_SIZE);

View File

@ -97,8 +97,12 @@ typedef struct
uint32 xrecoff; /* low bits */ uint32 xrecoff; /* low bits */
} PageXLogRecPtr; } PageXLogRecPtr;
#define PageXLogRecPtrGet(val) \ static inline XLogRecPtr
((uint64) (val).xlogid << 32 | (val).xrecoff) PageXLogRecPtrGet(PageXLogRecPtr val)
{
return (uint64) val.xlogid << 32 | val.xrecoff;
}
#define PageXLogRecPtrSet(ptr, lsn) \ #define PageXLogRecPtrSet(ptr, lsn) \
((ptr).xlogid = (uint32) ((lsn) >> 32), (ptr).xrecoff = (uint32) (lsn)) ((ptr).xlogid = (uint32) ((lsn) >> 32), (ptr).xrecoff = (uint32) (lsn))
@ -200,16 +204,10 @@ typedef PageHeaderData *PageHeader;
#define PG_DATA_CHECKSUM_VERSION 1 #define PG_DATA_CHECKSUM_VERSION 1
/* ---------------------------------------------------------------- /* ----------------------------------------------------------------
* page support macros * page support functions
* ---------------------------------------------------------------- * ----------------------------------------------------------------
*/ */
/*
* PageIsValid
* True iff page is valid.
*/
#define PageIsValid(page) PointerIsValid(page)
/* /*
* line pointer(s) do not count as part of header * line pointer(s) do not count as part of header
*/ */
@ -219,21 +217,31 @@ typedef PageHeaderData *PageHeader;
* PageIsEmpty * PageIsEmpty
* returns true iff no itemid has been allocated on the page * returns true iff no itemid has been allocated on the page
*/ */
#define PageIsEmpty(page) \ static inline bool
(((PageHeader) (page))->pd_lower <= SizeOfPageHeaderData) PageIsEmpty(Page page)
{
return ((PageHeader) page)->pd_lower <= SizeOfPageHeaderData;
}
/* /*
* PageIsNew * PageIsNew
* returns true iff page has not been initialized (by PageInit) * returns true iff page has not been initialized (by PageInit)
*/ */
#define PageIsNew(page) (((PageHeader) (page))->pd_upper == 0) static inline bool
PageIsNew(Page page)
{
return ((PageHeader) page)->pd_upper == 0;
}
/* /*
* PageGetItemId * PageGetItemId
* Returns an item identifier of a page. * Returns an item identifier of a page.
*/ */
#define PageGetItemId(page, offsetNumber) \ static inline ItemId
((ItemId) (&((PageHeader) (page))->pd_linp[(offsetNumber) - 1])) PageGetItemId(Page page, OffsetNumber offsetNumber)
{
return &((PageHeader) page)->pd_linp[offsetNumber - 1];
}
/* /*
* PageGetContents * PageGetContents
@ -243,20 +251,17 @@ typedef PageHeaderData *PageHeader;
* Now it is. Beware of old code that might think the offset to the contents * Now it is. Beware of old code that might think the offset to the contents
* is just SizeOfPageHeaderData rather than MAXALIGN(SizeOfPageHeaderData). * is just SizeOfPageHeaderData rather than MAXALIGN(SizeOfPageHeaderData).
*/ */
#define PageGetContents(page) \ static inline char *
((char *) (page) + MAXALIGN(SizeOfPageHeaderData)) PageGetContents(Page page)
{
return (char *) page + MAXALIGN(SizeOfPageHeaderData);
}
/* ---------------- /* ----------------
* macros to access page size info * functions to access page size info
* ---------------- * ----------------
*/ */
/*
* PageSizeIsValid
* True iff the page size is valid.
*/
#define PageSizeIsValid(pageSize) ((pageSize) == BLCKSZ)
/* /*
* PageGetPageSize * PageGetPageSize
* Returns the page size of a page. * Returns the page size of a page.
@ -265,15 +270,21 @@ typedef PageHeaderData *PageHeader;
* BufferGetPageSize, which can be called on an unformatted page). * BufferGetPageSize, which can be called on an unformatted page).
* however, it can be called on a page that is not stored in a buffer. * however, it can be called on a page that is not stored in a buffer.
*/ */
#define PageGetPageSize(page) \ static inline Size
((Size) (((PageHeader) (page))->pd_pagesize_version & (uint16) 0xFF00)) PageGetPageSize(Page page)
{
return (Size) (((PageHeader) page)->pd_pagesize_version & (uint16) 0xFF00);
}
/* /*
* PageGetPageLayoutVersion * PageGetPageLayoutVersion
* Returns the page layout version of a page. * Returns the page layout version of a page.
*/ */
#define PageGetPageLayoutVersion(page) \ static inline uint8
(((PageHeader) (page))->pd_pagesize_version & 0x00FF) PageGetPageLayoutVersion(Page page)
{
return (((PageHeader) page)->pd_pagesize_version & 0x00FF);
}
/* /*
* PageSetPageSizeAndVersion * PageSetPageSizeAndVersion
@ -282,52 +293,52 @@ typedef PageHeaderData *PageHeader;
* We could support setting these two values separately, but there's * We could support setting these two values separately, but there's
* no real need for it at the moment. * no real need for it at the moment.
*/ */
#define PageSetPageSizeAndVersion(page, size, version) \ static inline void
( \ PageSetPageSizeAndVersion(Page page, Size size, uint8 version)
AssertMacro(((size) & 0xFF00) == (size)), \ {
AssertMacro(((version) & 0x00FF) == (version)), \ Assert((size & 0xFF00) == size);
((PageHeader) (page))->pd_pagesize_version = (size) | (version) \ Assert((version & 0x00FF) == version);
)
((PageHeader) page)->pd_pagesize_version = size | version;
}
/* ---------------- /* ----------------
* page special data macros * page special data functions
* ---------------- * ----------------
*/ */
/* /*
* PageGetSpecialSize * PageGetSpecialSize
* Returns size of special space on a page. * Returns size of special space on a page.
*/ */
#define PageGetSpecialSize(page) \ static inline uint16
((uint16) (PageGetPageSize(page) - ((PageHeader)(page))->pd_special)) PageGetSpecialSize(Page page)
{
return (PageGetPageSize(page) - ((PageHeader) page)->pd_special);
}
/* /*
* Using assertions, validate that the page special pointer is OK. * Using assertions, validate that the page special pointer is OK.
* *
* This is intended to catch use of the pointer before page initialization. * This is intended to catch use of the pointer before page initialization.
* It is implemented as a function due to the limitations of the MSVC
* compiler, which choked on doing all these tests within another macro. We
* return true so that AssertMacro() can be used while still getting the
* specifics from the macro failure within this function.
*/ */
static inline bool static inline void
PageValidateSpecialPointer(Page page) PageValidateSpecialPointer(Page page)
{ {
Assert(PageIsValid(page)); Assert(page);
Assert(((PageHeader) (page))->pd_special <= BLCKSZ); Assert(((PageHeader) page)->pd_special <= BLCKSZ);
Assert(((PageHeader) (page))->pd_special >= SizeOfPageHeaderData); Assert(((PageHeader) page)->pd_special >= SizeOfPageHeaderData);
return true;
} }
/* /*
* PageGetSpecialPointer * PageGetSpecialPointer
* Returns pointer to special space on a page. * Returns pointer to special space on a page.
*/ */
#define PageGetSpecialPointer(page) \ static inline char *
( \ PageGetSpecialPointer(Page page)
AssertMacro(PageValidateSpecialPointer(page)), \ {
(char *) ((char *) (page) + ((PageHeader) (page))->pd_special) \ PageValidateSpecialPointer(page);
) return (char *) page + ((PageHeader) page)->pd_special;
}
/* /*
* PageGetItem * PageGetItem
@ -337,12 +348,14 @@ PageValidateSpecialPointer(Page page)
* This does not change the status of any of the resources passed. * This does not change the status of any of the resources passed.
* The semantics may change in the future. * The semantics may change in the future.
*/ */
#define PageGetItem(page, itemId) \ static inline Item
( \ PageGetItem(Page page, ItemId itemId)
AssertMacro(PageIsValid(page)), \ {
AssertMacro(ItemIdHasStorage(itemId)), \ Assert(page);
(Item)(((char *)(page)) + ItemIdGetOffset(itemId)) \ Assert(ItemIdHasStorage(itemId));
)
return (Item) (((char *) page) + ItemIdGetOffset(itemId));
}
/* /*
* PageGetMaxOffsetNumber * PageGetMaxOffsetNumber
@ -351,44 +364,84 @@ PageValidateSpecialPointer(Page page)
* of items on the page. * of items on the page.
* *
* NOTE: if the page is not initialized (pd_lower == 0), we must * NOTE: if the page is not initialized (pd_lower == 0), we must
* return zero to ensure sane behavior. Accept double evaluation * return zero to ensure sane behavior.
* of the argument so that we can ensure this.
*/ */
#define PageGetMaxOffsetNumber(page) \ static inline OffsetNumber
(((PageHeader) (page))->pd_lower <= SizeOfPageHeaderData ? 0 : \ PageGetMaxOffsetNumber(Page page)
((((PageHeader) (page))->pd_lower - SizeOfPageHeaderData) \ {
/ sizeof(ItemIdData))) PageHeader pageheader = (PageHeader) page;
if (pageheader->pd_lower <= SizeOfPageHeaderData)
return 0;
else
return (pageheader->pd_lower - SizeOfPageHeaderData) / sizeof(ItemIdData);
}
/* /*
* Additional macros for access to page headers. (Beware multiple evaluation * Additional functions for access to page headers.
* of the arguments!)
*/ */
#define PageGetLSN(page) \ static inline XLogRecPtr
PageXLogRecPtrGet(((PageHeader) (page))->pd_lsn) PageGetLSN(Page page)
#define PageSetLSN(page, lsn) \ {
PageXLogRecPtrSet(((PageHeader) (page))->pd_lsn, lsn) return PageXLogRecPtrGet(((PageHeader) page)->pd_lsn);
}
static inline void
PageSetLSN(Page page, XLogRecPtr lsn)
{
PageXLogRecPtrSet(((PageHeader) page)->pd_lsn, lsn);
}
#define PageHasFreeLinePointers(page) \ static inline bool
(((PageHeader) (page))->pd_flags & PD_HAS_FREE_LINES) PageHasFreeLinePointers(Page page)
#define PageSetHasFreeLinePointers(page) \ {
(((PageHeader) (page))->pd_flags |= PD_HAS_FREE_LINES) return ((PageHeader) page)->pd_flags & PD_HAS_FREE_LINES;
#define PageClearHasFreeLinePointers(page) \ }
(((PageHeader) (page))->pd_flags &= ~PD_HAS_FREE_LINES) static inline void
PageSetHasFreeLinePointers(Page page)
{
((PageHeader) page)->pd_flags |= PD_HAS_FREE_LINES;
}
static inline void
PageClearHasFreeLinePointers(Page page)
{
((PageHeader) page)->pd_flags &= ~PD_HAS_FREE_LINES;
}
#define PageIsFull(page) \ static inline bool
(((PageHeader) (page))->pd_flags & PD_PAGE_FULL) PageIsFull(Page page)
#define PageSetFull(page) \ {
(((PageHeader) (page))->pd_flags |= PD_PAGE_FULL) return ((PageHeader) page)->pd_flags & PD_PAGE_FULL;
#define PageClearFull(page) \ }
(((PageHeader) (page))->pd_flags &= ~PD_PAGE_FULL) static inline void
PageSetFull(Page page)
{
((PageHeader) page)->pd_flags |= PD_PAGE_FULL;
}
static inline void
PageClearFull(Page page)
{
((PageHeader) page)->pd_flags &= ~PD_PAGE_FULL;
}
#define PageIsAllVisible(page) \ static inline bool
(((PageHeader) (page))->pd_flags & PD_ALL_VISIBLE) PageIsAllVisible(Page page)
#define PageSetAllVisible(page) \ {
(((PageHeader) (page))->pd_flags |= PD_ALL_VISIBLE) return ((PageHeader) page)->pd_flags & PD_ALL_VISIBLE;
#define PageClearAllVisible(page) \ }
(((PageHeader) (page))->pd_flags &= ~PD_ALL_VISIBLE) static inline void
PageSetAllVisible(Page page)
{
((PageHeader) page)->pd_flags |= PD_ALL_VISIBLE;
}
static inline void
PageClearAllVisible(Page page)
{
((PageHeader) page)->pd_flags &= ~PD_ALL_VISIBLE;
}
/*
* These two require "access/transam.h", so left as macros.
*/
#define PageSetPrunable(page, xid) \ #define PageSetPrunable(page, xid) \
do { \ do { \
Assert(TransactionIdIsNormal(xid)); \ Assert(TransactionIdIsNormal(xid)); \
@ -413,15 +466,6 @@ do { \
#define PIV_LOG_WARNING (1 << 0) #define PIV_LOG_WARNING (1 << 0)
#define PIV_REPORT_STAT (1 << 1) #define PIV_REPORT_STAT (1 << 1)
#define PageAddItem(page, item, size, offsetNumber, overwrite, is_heap) \
PageAddItemExtended(page, item, size, offsetNumber, \
((overwrite) ? PAI_OVERWRITE : 0) | \
((is_heap) ? PAI_IS_HEAP : 0))
#define PageIsVerified(page, blkno) \
PageIsVerifiedExtended(page, blkno, \
PIV_LOG_WARNING | PIV_REPORT_STAT)
/* /*
* Check that BLCKSZ is a multiple of sizeof(size_t). In * Check that BLCKSZ is a multiple of sizeof(size_t). In
* PageIsVerifiedExtended(), it is much faster to check if a page is * PageIsVerifiedExtended(), it is much faster to check if a page is
@ -436,6 +480,21 @@ extern void PageInit(Page page, Size pageSize, Size specialSize);
extern bool PageIsVerifiedExtended(Page page, BlockNumber blkno, int flags); extern bool PageIsVerifiedExtended(Page page, BlockNumber blkno, int flags);
extern OffsetNumber PageAddItemExtended(Page page, Item item, Size size, extern OffsetNumber PageAddItemExtended(Page page, Item item, Size size,
OffsetNumber offsetNumber, int flags); OffsetNumber offsetNumber, int flags);
static inline OffsetNumber
PageAddItem(Page page, Item item, Size size, OffsetNumber offsetNumber, bool overwrite, bool is_heap)
{
return PageAddItemExtended(page, item, size, offsetNumber,
(overwrite ? PAI_OVERWRITE : 0) |
(is_heap ? PAI_IS_HEAP : 0));
}
static inline bool
PageIsVerified(Page page, BlockNumber blkno)
{
return PageIsVerifiedExtended(page, blkno, PIV_LOG_WARNING | PIV_REPORT_STAT);
}
extern Page PageGetTempPage(Page page); extern Page PageGetTempPage(Page page);
extern Page PageGetTempPageCopy(Page page); extern Page PageGetTempPageCopy(Page page);
extern Page PageGetTempPageCopySpecial(Page page); extern Page PageGetTempPageCopySpecial(Page page);

View File

@ -191,7 +191,7 @@ pg_checksum_page(char *page, BlockNumber blkno)
uint32 checksum; uint32 checksum;
/* We only calculate the checksum for properly-initialized pages */ /* We only calculate the checksum for properly-initialized pages */
Assert(!PageIsNew(&cpage->phdr)); Assert(!PageIsNew((Page) page));
/* /*
* Save pd_checksum and temporarily set it to zero, so that the checksum * Save pd_checksum and temporarily set it to zero, so that the checksum