* to pgstat.
*/
bool
-PageIsVerifiedExtended(Page page, BlockNumber blkno, int flags)
+PageIsVerifiedExtended(const PageData *page, BlockNumber blkno, int flags)
{
- PageHeader p = (PageHeader) page;
+ const PageHeaderData *p = (const PageHeaderData *) page;
size_t *pagebytes;
bool checksum_failure = false;
bool header_sane = false;
* The returned page is not initialized at all; caller must do that.
*/
Page
-PageGetTempPage(Page page)
+PageGetTempPage(const PageData *page)
{
Size pageSize;
Page temp;
* The page is initialized by copying the contents of the given page.
*/
Page
-PageGetTempPageCopy(Page page)
+PageGetTempPageCopy(const PageData *page)
{
Size pageSize;
Page temp;
* given page, and the special space is copied from the given page.
*/
Page
-PageGetTempPageCopySpecial(Page page)
+PageGetTempPageCopySpecial(const PageData *page)
{
Size pageSize;
Page temp;
* PageGetHeapFreeSpace on heap pages.
*/
Size
-PageGetFreeSpace(Page page)
+PageGetFreeSpace(const PageData *page)
{
+ const PageHeaderData *phdr = (const PageHeaderData *) page;
int space;
/*
* Use signed arithmetic here so that we behave sensibly if pd_lower >
* pd_upper.
*/
- space = (int) ((PageHeader) page)->pd_upper -
- (int) ((PageHeader) page)->pd_lower;
+ space = (int) phdr->pd_upper - (int) phdr->pd_lower;
if (space < (int) sizeof(ItemIdData))
return 0;
* PageGetHeapFreeSpace on heap pages.
*/
Size
-PageGetFreeSpaceForMultipleTuples(Page page, int ntups)
+PageGetFreeSpaceForMultipleTuples(const PageData *page, int ntups)
{
+ const PageHeaderData *phdr = (const PageHeaderData *) page;
int space;
/*
* Use signed arithmetic here so that we behave sensibly if pd_lower >
* pd_upper.
*/
- space = (int) ((PageHeader) page)->pd_upper -
- (int) ((PageHeader) page)->pd_lower;
+ space = (int) phdr->pd_upper - (int) phdr->pd_lower;
if (space < (int) (ntups * sizeof(ItemIdData)))
return 0;
* without any consideration for adding/removing line pointers.
*/
Size
-PageGetExactFreeSpace(Page page)
+PageGetExactFreeSpace(const PageData *page)
{
+ const PageHeaderData *phdr = (const PageHeaderData *) page;
int space;
/*
* Use signed arithmetic here so that we behave sensibly if pd_lower >
* pd_upper.
*/
- space = (int) ((PageHeader) page)->pd_upper -
- (int) ((PageHeader) page)->pd_lower;
+ space = (int) phdr->pd_upper - (int) phdr->pd_lower;
if (space < 0)
return 0;
* on the number of line pointers, we make this extra check.)
*/
Size
-PageGetHeapFreeSpace(Page page)
+PageGetHeapFreeSpace(const PageData *page)
{
Size space;
*/
for (offnum = FirstOffsetNumber; offnum <= nline; offnum = OffsetNumberNext(offnum))
{
- ItemId lp = PageGetItemId(page, offnum);
+ ItemId lp = PageGetItemId(unconstify(PageData *, page), offnum);
if (!ItemIdIsUsed(lp))
break;
* returns true iff no itemid has been allocated on the page
*/
static inline bool
-PageIsEmpty(Page page)
+PageIsEmpty(const PageData *page)
{
- return ((PageHeader) page)->pd_lower <= SizeOfPageHeaderData;
+ return ((const PageHeaderData *) page)->pd_lower <= SizeOfPageHeaderData;
}
/*
* returns true iff page has not been initialized (by PageInit)
*/
static inline bool
-PageIsNew(Page page)
+PageIsNew(const PageData *page)
{
- return ((PageHeader) page)->pd_upper == 0;
+ return ((const PageHeaderData *) page)->pd_upper == 0;
}
/*
* however, it can be called on a page that is not stored in a buffer.
*/
static inline Size
-PageGetPageSize(Page page)
+PageGetPageSize(const PageData *page)
{
- return (Size) (((PageHeader) page)->pd_pagesize_version & (uint16) 0xFF00);
+ return (Size) (((const PageHeaderData *) page)->pd_pagesize_version & (uint16) 0xFF00);
}
/*
* Returns the page layout version of a page.
*/
static inline uint8
-PageGetPageLayoutVersion(Page page)
+PageGetPageLayoutVersion(const PageData *page)
{
- return (((PageHeader) page)->pd_pagesize_version & 0x00FF);
+ return (((const PageHeaderData *) page)->pd_pagesize_version & 0x00FF);
}
/*
* Returns size of special space on a page.
*/
static inline uint16
-PageGetSpecialSize(Page page)
+PageGetSpecialSize(const PageData *page)
{
- return (PageGetPageSize(page) - ((PageHeader) page)->pd_special);
+ return (PageGetPageSize(page) - ((const PageHeaderData *) page)->pd_special);
}
/*
* This is intended to catch use of the pointer before page initialization.
*/
static inline void
-PageValidateSpecialPointer(Page page)
+PageValidateSpecialPointer(const PageData *page)
{
Assert(page);
- Assert(((PageHeader) page)->pd_special <= BLCKSZ);
- Assert(((PageHeader) page)->pd_special >= SizeOfPageHeaderData);
+ Assert(((const PageHeaderData *) page)->pd_special <= BLCKSZ);
+ Assert(((const PageHeaderData *) page)->pd_special >= SizeOfPageHeaderData);
}
/*
* PageGetSpecialPointer
* Returns pointer to special space on a page.
*/
-static inline char *
-PageGetSpecialPointer(Page page)
-{
- PageValidateSpecialPointer(page);
- return (char *) page + ((PageHeader) page)->pd_special;
-}
+#define PageGetSpecialPointer(page) \
+( \
+ PageValidateSpecialPointer(page), \
+ ((page) + ((PageHeader) (page))->pd_special) \
+)
/*
* PageGetItem
* The semantics may change in the future.
*/
static inline Item
-PageGetItem(Page page, ItemId itemId)
+PageGetItem(const PageData *page, const ItemIdData *itemId)
{
Assert(page);
Assert(ItemIdHasStorage(itemId));
- return (Item) (((char *) page) + ItemIdGetOffset(itemId));
+ return (Item) (((const char *) page) + ItemIdGetOffset(itemId));
}
/*
* return zero to ensure sane behavior.
*/
static inline OffsetNumber
-PageGetMaxOffsetNumber(Page page)
+PageGetMaxOffsetNumber(const PageData *page)
{
- PageHeader pageheader = (PageHeader) page;
+ const PageHeaderData *pageheader = (const PageHeaderData *) page;
if (pageheader->pd_lower <= SizeOfPageHeaderData)
return 0;
* Additional functions for access to page headers.
*/
static inline XLogRecPtr
-PageGetLSN(const char *page)
+PageGetLSN(const PageData *page)
{
return PageXLogRecPtrGet(((const PageHeaderData *) page)->pd_lsn);
}
}
static inline bool
-PageHasFreeLinePointers(Page page)
+PageHasFreeLinePointers(const PageData *page)
{
- return ((PageHeader) page)->pd_flags & PD_HAS_FREE_LINES;
+ return ((const PageHeaderData *) page)->pd_flags & PD_HAS_FREE_LINES;
}
static inline void
PageSetHasFreeLinePointers(Page page)
}
static inline bool
-PageIsFull(Page page)
+PageIsFull(const PageData *page)
{
- return ((PageHeader) page)->pd_flags & PD_PAGE_FULL;
+ return ((const PageHeaderData *) page)->pd_flags & PD_PAGE_FULL;
}
static inline void
PageSetFull(Page page)
}
static inline bool
-PageIsAllVisible(Page page)
+PageIsAllVisible(const PageData *page)
{
- return ((PageHeader) page)->pd_flags & PD_ALL_VISIBLE;
+ return ((const PageHeaderData *) page)->pd_flags & PD_ALL_VISIBLE;
}
static inline void
PageSetAllVisible(Page page)
"BLCKSZ has to be a multiple of sizeof(size_t)");
extern void PageInit(Page page, Size pageSize, Size specialSize);
-extern bool PageIsVerifiedExtended(Page page, BlockNumber blkno, int flags);
+extern bool PageIsVerifiedExtended(const PageData *page, BlockNumber blkno, int flags);
extern OffsetNumber PageAddItemExtended(Page page, Item item, Size size,
OffsetNumber offsetNumber, int flags);
-extern Page PageGetTempPage(Page page);
-extern Page PageGetTempPageCopy(Page page);
-extern Page PageGetTempPageCopySpecial(Page page);
+extern Page PageGetTempPage(const PageData *page);
+extern Page PageGetTempPageCopy(const PageData *page);
+extern Page PageGetTempPageCopySpecial(const PageData *page);
extern void PageRestoreTempPage(Page tempPage, Page oldPage);
extern void PageRepairFragmentation(Page page);
extern void PageTruncateLinePointerArray(Page page);
-extern Size PageGetFreeSpace(Page page);
-extern Size PageGetFreeSpaceForMultipleTuples(Page page, int ntups);
-extern Size PageGetExactFreeSpace(Page page);
-extern Size PageGetHeapFreeSpace(Page page);
+extern Size PageGetFreeSpace(const PageData *page);
+extern Size PageGetFreeSpaceForMultipleTuples(const PageData *page, int ntups);
+extern Size PageGetExactFreeSpace(const PageData *page);
+extern Size PageGetHeapFreeSpace(const PageData *page);
extern void PageIndexTupleDelete(Page page, OffsetNumber offnum);
extern void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems);
extern void PageIndexTupleDeleteNoCompact(Page page, OffsetNumber offnum);