100 #define PageXLogRecPtrGet(val) \ 101 ((uint64) (val).xlogid << 32 | (val).xrecoff) 102 #define PageXLogRecPtrSet(ptr, lsn) \ 103 ((ptr).xlogid = (uint32) ((lsn) >> 32), (ptr).xrecoff = (uint32) (lsn)) 180 #define PD_HAS_FREE_LINES 0x0001 181 #define PD_PAGE_FULL 0x0002 182 #define PD_ALL_VISIBLE 0x0004 185 #define PD_VALID_FLAG_BITS 0x0007 199 #define PG_PAGE_LAYOUT_VERSION 4 200 #define PG_DATA_CHECKSUM_VERSION 1 211 #define PageIsValid(page) PointerIsValid(page) 216 #define SizeOfPageHeaderData (offsetof(PageHeaderData, pd_linp)) 222 #define PageIsEmpty(page) \ 223 (((PageHeader) (page))->pd_lower <= SizeOfPageHeaderData) 229 #define PageIsNew(page) (((PageHeader) (page))->pd_upper == 0) 235 #define PageGetItemId(page, offsetNumber) \ 236 ((ItemId) (&((PageHeader) (page))->pd_linp[(offsetNumber) - 1])) 246 #define PageGetContents(page) \ 247 ((char *) (page) + MAXALIGN(SizeOfPageHeaderData)) 258 #define PageSizeIsValid(pageSize) ((pageSize) == BLCKSZ) 268 #define PageGetPageSize(page) \ 269 ((Size) (((PageHeader) (page))->pd_pagesize_version & (uint16) 0xFF00)) 275 #define PageGetPageLayoutVersion(page) \ 276 (((PageHeader) (page))->pd_pagesize_version & 0x00FF) 285 #define PageSetPageSizeAndVersion(page, size, version) \ 287 AssertMacro(((size) & 0xFF00) == (size)), \ 288 AssertMacro(((version) & 0x00FF) == (version)), \ 289 ((PageHeader) (page))->pd_pagesize_version = (size) | (version) \ 300 #define PageGetSpecialSize(page) \ 301 ((uint16) (PageGetPageSize(page) - ((PageHeader)(page))->pd_special)) 326 #define PageGetSpecialPointer(page) \ 328 AssertMacro(PageValidateSpecialPointer(page)), \ 329 (char *) ((char *) (page) + ((PageHeader) (page))->pd_special) \ 340 #define PageGetItem(page, itemId) \ 342 AssertMacro(PageIsValid(page)), \ 343 AssertMacro(ItemIdHasStorage(itemId)), \ 344 (Item)(((char *)(page)) + ItemIdGetOffset(itemId)) \ 357 #define PageGetMaxOffsetNumber(page) \ 358 (((PageHeader) (page))->pd_lower <= SizeOfPageHeaderData ? 0 : \ 359 ((((PageHeader) (page))->pd_lower - SizeOfPageHeaderData) \ 360 / sizeof(ItemIdData))) 366 #define PageGetLSN(page) \ 367 PageXLogRecPtrGet(((PageHeader) (page))->pd_lsn) 368 #define PageSetLSN(page, lsn) \ 369 PageXLogRecPtrSet(((PageHeader) (page))->pd_lsn, lsn) 371 #define PageHasFreeLinePointers(page) \ 372 (((PageHeader) (page))->pd_flags & PD_HAS_FREE_LINES) 373 #define PageSetHasFreeLinePointers(page) \ 374 (((PageHeader) (page))->pd_flags |= PD_HAS_FREE_LINES) 375 #define PageClearHasFreeLinePointers(page) \ 376 (((PageHeader) (page))->pd_flags &= ~PD_HAS_FREE_LINES) 378 #define PageIsFull(page) \ 379 (((PageHeader) (page))->pd_flags & PD_PAGE_FULL) 380 #define PageSetFull(page) \ 381 (((PageHeader) (page))->pd_flags |= PD_PAGE_FULL) 382 #define PageClearFull(page) \ 383 (((PageHeader) (page))->pd_flags &= ~PD_PAGE_FULL) 385 #define PageIsAllVisible(page) \ 386 (((PageHeader) (page))->pd_flags & PD_ALL_VISIBLE) 387 #define PageSetAllVisible(page) \ 388 (((PageHeader) (page))->pd_flags |= PD_ALL_VISIBLE) 389 #define PageClearAllVisible(page) \ 390 (((PageHeader) (page))->pd_flags &= ~PD_ALL_VISIBLE) 392 #define PageSetPrunable(page, xid) \ 394 Assert(TransactionIdIsNormal(xid)); \ 395 if (!TransactionIdIsValid(((PageHeader) (page))->pd_prune_xid) || \ 396 TransactionIdPrecedes(xid, ((PageHeader) (page))->pd_prune_xid)) \ 397 ((PageHeader) (page))->pd_prune_xid = (xid); \ 399 #define PageClearPrunable(page) \ 400 (((PageHeader) (page))->pd_prune_xid = InvalidTransactionId) 409 #define PAI_OVERWRITE (1 << 0) 410 #define PAI_IS_HEAP (1 << 1) 413 #define PIV_LOG_WARNING (1 << 0) 414 #define PIV_REPORT_STAT (1 << 1) 416 #define PageAddItem(page, item, size, offsetNumber, overwrite, is_heap) \ 417 PageAddItemExtended(page, item, size, offsetNumber, \ 418 ((overwrite) ? PAI_OVERWRITE : 0) | \ 419 ((is_heap) ? PAI_IS_HEAP : 0)) 421 #define PageIsVerified(page, blkno) \ 422 PageIsVerifiedExtended(page, blkno, \ 423 PIV_LOG_WARNING | PIV_REPORT_STAT) 433 "BLCKSZ has to be a multiple of sizeof(size_t)");
Size PageGetFreeSpaceForMultipleTuples(Page page, int ntups)
void PageIndexTupleDelete(Page page, OffsetNumber offset)
void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems)
void PageSetChecksumInplace(Page page, BlockNumber blkno)
#define FLEXIBLE_ARRAY_MEMBER
static bool PageValidateSpecialPointer(Page page)
StaticAssertDecl(BLCKSZ==((BLCKSZ/sizeof(size_t)) *sizeof(size_t)), "BLCKSZ has to be a multiple of sizeof(size_t)")
void PageRepairFragmentation(Page page)
#define PageIsValid(page)
#define SizeOfPageHeaderData
bool PageIsVerifiedExtended(Page page, BlockNumber blkno, int flags)
OffsetNumber PageAddItemExtended(Page page, Item item, Size size, OffsetNumber offsetNumber, int flags)
Page PageGetTempPage(Page page)
Size PageGetExactFreeSpace(Page page)
void PageInit(Page page, Size pageSize, Size specialSize)
Page PageGetTempPageCopy(Page page)
Size PageGetFreeSpace(Page page)
Page PageGetTempPageCopySpecial(Page page)
void PageRestoreTempPage(Page tempPage, Page oldPage)
struct PageHeaderData PageHeaderData
PageHeaderData * PageHeader
#define Assert(condition)
void PageIndexTupleDeleteNoCompact(Page page, OffsetNumber offset)
char * PageSetChecksumCopy(Page page, BlockNumber blkno)
Size PageGetHeapFreeSpace(Page page)
bool PageIndexTupleOverwrite(Page page, OffsetNumber offnum, Item newtup, Size newsize)