102 elog(
ERROR,
"failed to add item to GiST index page, size %d bytes",
123 if (
data - begin < datalen)
128 while (
data - begin < datalen)
138 elog(
ERROR,
"failed to add item to GiST index page, size %d bytes",
230 memcpy(n, begin,
sizeof(
int));
231 ptr = begin +
sizeof(int);
235 for (
i = 0;
i < *n;
i++)
255 bool isrootsplit =
false;
306 if (i < xldata->npage - 1)
316 if (i < xldata->npage - 1 && !isrootsplit &&
327 firstbuffer = buffer;
430 elog(
PANIC,
"gist_redo: unknown op code %u", info);
498 Buffer leftchildbuf,
bool markfollowright)
506 for (ptr = dist; ptr; ptr = ptr->
next)
534 for (ptr = dist; ptr; ptr = ptr->
next)
608 xlrec_reuse.
block = blkno;
648 for (
i = 0;
i < ituplen;
i++)
#define InvalidBlockNumber
void mask_lp_flags(Page page)
void mask_page_lsn_and_checksum(Page page)
void mask_unused_space(Page page)
void mask_page_hint_bits(Page page)
void UnlockReleaseBuffer(Buffer buffer)
void MarkBufferDirty(Buffer buffer)
static Page BufferGetPage(Buffer buffer)
static bool BufferIsValid(Buffer bufnum)
void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems)
bool PageIndexTupleOverwrite(Page page, OffsetNumber offnum, Item newtup, Size newsize)
void PageIndexTupleDelete(Page page, OffsetNumber offnum)
static bool PageIsEmpty(const PageData *page)
static void PageSetLSN(Page page, XLogRecPtr lsn)
#define PageAddItem(page, item, size, offsetNumber, overwrite, is_heap)
static OffsetNumber PageGetMaxOffsetNumber(const PageData *page)
#define PG_USED_FOR_ASSERTS_ONLY
#define Assert(condition)
MemoryContext createTempGistContext(void)
#define GistMarkFollowRight(page)
#define GistClearFollowRight(page)
#define GistClearPageHasGarbage(page)
#define GistPageIsLeaf(page)
static void GistPageSetDeleted(Page page, FullTransactionId deletexid)
#define GistMarkTuplesDeleted(page)
#define GistPageSetNSN(page, val)
#define GistPageGetOpaque(page)
void gistfillbuffer(Page page, IndexTuple *itup, int len, OffsetNumber off)
void GISTInitBuffer(Buffer b, uint32 f)
static void gistRedoPageReuse(XLogReaderState *record)
void gist_xlog_startup(void)
static void gistRedoPageUpdateRecord(XLogReaderState *record)
static void gistRedoPageSplitRecord(XLogReaderState *record)
void gist_redo(XLogReaderState *record)
XLogRecPtr gistXLogAssignLSN(void)
static void gistRedoPageDelete(XLogReaderState *record)
XLogRecPtr gistXLogSplit(bool page_is_leaf, SplitPageLayout *dist, BlockNumber origrlink, GistNSN orignsn, Buffer leftchildbuf, bool markfollowright)
XLogRecPtr gistXLogPageDelete(Buffer buffer, FullTransactionId xid, Buffer parentBuffer, OffsetNumber downlinkOffset)
XLogRecPtr gistXLogDelete(Buffer buffer, OffsetNumber *todelete, int ntodelete, TransactionId snapshotConflictHorizon, Relation heaprel)
static IndexTuple * decodePageSplitRecord(char *begin, int len, int *n)
static void gistRedoDeleteRecord(XLogReaderState *record)
void gistXLogPageReuse(Relation rel, Relation heaprel, BlockNumber blkno, FullTransactionId deleteXid)
XLogRecPtr gistXLogUpdate(Buffer buffer, OffsetNumber *todelete, int ntodelete, IndexTuple *itup, int ituplen, Buffer leftchildbuf)
void gist_xlog_cleanup(void)
static void gistRedoClearFollowRight(XLogReaderState *record, uint8 block_id)
static MemoryContext opCtx
void gist_mask(char *pagedata, BlockNumber blkno)
#define SizeOfGistxlogPageDelete
#define XLOG_GIST_ASSIGN_LSN
#define SizeOfGistxlogDelete
#define XLOG_GIST_PAGE_REUSE
#define XLOG_GIST_PAGE_DELETE
#define SizeOfGistxlogPageReuse
#define XLOG_GIST_PAGE_SPLIT
#define XLOG_GIST_PAGE_UPDATE
IndexTupleData * IndexTuple
#define IndexTupleSize(itup)
void MemoryContextReset(MemoryContext context)
void MemoryContextDelete(MemoryContext context)
#define InvalidOffsetNumber
#define OffsetNumberNext(offsetNumber)
#define FirstOffsetNumber
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
#define RelationIsAccessibleInLogicalDecoding(relation)
void ResolveRecoveryConflictWithSnapshotFullXid(FullTransactionId snapshotConflictHorizon, bool isCatalogRel, RelFileLocator locator)
void ResolveRecoveryConflictWithSnapshot(TransactionId snapshotConflictHorizon, bool isCatalogRel, RelFileLocator locator)
RelFileLocator rd_locator
struct SplitPageLayout * next
TransactionId snapshotConflictHorizon
OffsetNumber offsets[FLEXIBLE_ARRAY_MEMBER]
FullTransactionId deleteXid
OffsetNumber downlinkOffset
#define XLOG_MARK_UNIMPORTANT
void XLogRegisterBufData(uint8 block_id, const char *data, uint32 len)
XLogRecPtr XLogInsert(RmgrId rmid, uint8 info)
void XLogSetRecordFlags(uint8 flags)
void XLogRegisterData(const char *data, uint32 len)
void XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags)
void XLogBeginInsert(void)
char * XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len)
void XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id, RelFileLocator *rlocator, ForkNumber *forknum, BlockNumber *blknum)
#define XLogRecGetInfo(decoder)
#define XLogRecGetData(decoder)
#define XLogRecHasBlockRef(decoder, block_id)
XLogRedoAction XLogReadBufferForRedo(XLogReaderState *record, uint8 block_id, Buffer *buf)
Buffer XLogInitBufferForRedo(XLogReaderState *record, uint8 block_id)