109#define PageXLogRecPtrSet(ptr, lsn) \
110 ((ptr).xlogid = (uint32) ((lsn) >> 32), (ptr).xrecoff = (uint32) (lsn))
187#define PD_HAS_FREE_LINES 0x0001
188#define PD_PAGE_FULL 0x0002
189#define PD_ALL_VISIBLE 0x0004
192#define PD_VALID_FLAG_BITS 0x0007
206#define PG_PAGE_LAYOUT_VERSION 4
207#define PG_DATA_CHECKSUM_VERSION 1
217#define SizeOfPageHeaderData (offsetof(PageHeaderData, pd_linp))
246 return &((
PageHeader) page)->pd_linp[offsetNumber - 1];
289 return (((
const PageHeaderData *) page)->pd_pagesize_version & 0x00FF);
302 Assert((size & 0xFF00) == size);
303 Assert((version & 0x00FF) == version);
305 ((
PageHeader) page)->pd_pagesize_version = size | version;
339#define PageGetSpecialPointer(page) \
341 PageValidateSpecialPointer(page), \
342 ((page) + ((PageHeader) (page))->pd_special) \
409 ((
PageHeader) page)->pd_flags &= ~PD_HAS_FREE_LINES;
425 ((
PageHeader) page)->pd_flags &= ~PD_PAGE_FULL;
441 ((
PageHeader) page)->pd_flags &= ~PD_ALL_VISIBLE;
447#define PageSetPrunable(page, xid) \
449 Assert(TransactionIdIsNormal(xid)); \
450 if (!TransactionIdIsValid(((PageHeader) (page))->pd_prune_xid) || \
451 TransactionIdPrecedes(xid, ((PageHeader) (page))->pd_prune_xid)) \
452 ((PageHeader) (page))->pd_prune_xid = (xid); \
454#define PageClearPrunable(page) \
455 (((PageHeader) (page))->pd_prune_xid = InvalidTransactionId)
464#define PAI_OVERWRITE (1 << 0)
465#define PAI_IS_HEAP (1 << 1)
468#define PIV_LOG_WARNING (1 << 0)
469#define PIV_LOG_LOG (1 << 1)
470#define PIV_IGNORE_CHECKSUM_FAILURE (1 << 2)
472#define PageAddItem(page, item, size, offsetNumber, overwrite, is_heap) \
473 PageAddItemExtended(page, item, size, offsetNumber, \
474 ((overwrite) ? PAI_OVERWRITE : 0) | \
475 ((is_heap) ? PAI_IS_HEAP : 0))
485 "BLCKSZ has to be a multiple of sizeof(size_t)");
489 bool *checksum_failure_p);
506 const void *newtup,
Size newsize);
struct PageHeaderData PageHeaderData
Size PageGetFreeSpace(const PageData *page)
static bool PageIsEmpty(const PageData *page)
PageHeaderData * PageHeader
PGDLLIMPORT bool ignore_checksum_failure
void PageRestoreTempPage(Page tempPage, Page oldPage)
static void PageSetHasFreeLinePointers(Page page)
Size PageGetFreeSpaceForMultipleTuples(const PageData *page, int ntups)
Size PageGetHeapFreeSpace(const PageData *page)
static bool PageIsAllVisible(const PageData *page)
static uint16 PageGetSpecialSize(const PageData *page)
static void PageClearAllVisible(Page page)
Page PageGetTempPage(const PageData *page)
static Size PageGetPageSize(const PageData *page)
Page PageGetTempPageCopy(const PageData *page)
void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems)
static void * PageGetItem(const PageData *page, const ItemIdData *itemId)
static void PageClearFull(Page page)
static XLogRecPtr PageXLogRecPtrGet(PageXLogRecPtr val)
static bool PageIsNew(const PageData *page)
#define SizeOfPageHeaderData
static char * PageGetContents(Page page)
bool PageIndexTupleOverwrite(Page page, OffsetNumber offnum, const void *newtup, Size newsize)
static void PageSetAllVisible(Page page)
static uint8 PageGetPageLayoutVersion(const PageData *page)
static ItemId PageGetItemId(Page page, OffsetNumber offsetNumber)
void PageSetChecksumInplace(Page page, BlockNumber blkno)
static void PageSetFull(Page page)
static bool PageHasFreeLinePointers(const PageData *page)
OffsetNumber PageAddItemExtended(Page page, const void *item, Size size, OffsetNumber offsetNumber, int flags)
static void PageSetLSN(Page page, XLogRecPtr lsn)
void PageIndexTupleDelete(Page page, OffsetNumber offnum)
char * PageSetChecksumCopy(Page page, BlockNumber blkno)
void PageRepairFragmentation(Page page)
Size PageGetExactFreeSpace(const PageData *page)
void PageTruncateLinePointerArray(Page page)
void PageInit(Page page, Size pageSize, Size specialSize)
static void PageClearHasFreeLinePointers(Page page)
bool PageIsVerified(PageData *page, BlockNumber blkno, int flags, bool *checksum_failure_p)
StaticAssertDecl(BLCKSZ==((BLCKSZ/sizeof(size_t)) *sizeof(size_t)), "BLCKSZ has to be a multiple of sizeof(size_t)")
#define PD_HAS_FREE_LINES
Page PageGetTempPageCopySpecial(const PageData *page)
static void PageValidateSpecialPointer(const PageData *page)
void PageIndexTupleDeleteNoCompact(Page page, OffsetNumber offnum)
static XLogRecPtr PageGetLSN(const PageData *page)
static void PageSetPageSizeAndVersion(Page page, Size size, uint8 version)
#define PageXLogRecPtrSet(ptr, lsn)
static bool PageIsFull(const PageData *page)
static OffsetNumber PageGetMaxOffsetNumber(const PageData *page)
#define FLEXIBLE_ARRAY_MEMBER
Assert(PointerIsAligned(start, uint64))
#define ItemIdGetOffset(itemId)
struct ItemIdData ItemIdData
#define ItemIdHasStorage(itemId)