96 if (data - begin < datalen)
101 while (data - begin < datalen)
111 elog(
ERROR,
"failed to add item to GiST index page, size %d bytes",
149 memcpy(n, begin,
sizeof(
int));
150 ptr = begin +
sizeof(int);
154 for (i = 0; i < *n; i++)
156 Assert(ptr - begin < len);
160 Assert(ptr - begin == len);
174 bool isrootsplit =
false;
185 for (i = 0; i < xldata->
npage; i++)
225 if (i < xldata->npage - 1)
235 if (i < xldata->npage - 1 && !isrootsplit &&
246 firstbuffer = buffer;
303 elog(
PANIC,
"gist_redo: unknown op code %u", info);
329 Buffer leftchildbuf,
bool markfollowright)
337 for (ptr = dist; ptr; ptr = ptr->
next)
365 for (ptr = dist; ptr; ptr = ptr->
next)
409 for (i = 0; i < ituplen; i++)
void XLogRegisterBufData(uint8 block_id, char *data, int len)
static void gistRedoPageUpdateRecord(XLogReaderState *record)
#define XLOG_GIST_CREATE_INDEX
void MemoryContextDelete(MemoryContext context)
#define PageIsEmpty(page)
OffsetNumber PageAddItem(Page page, Item item, Size size, OffsetNumber offsetNumber, bool overwrite, bool is_heap)
void MarkBufferDirty(Buffer buffer)
MemoryContext createTempGistContext(void)
void XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags)
#define GistMarkTuplesDeleted(page)
void gistfillbuffer(Page page, IndexTuple *itup, int len, OffsetNumber off)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
#define XLOG_GIST_PAGE_SPLIT
#define GistPageSetNSN(page, val)
#define XLogRecHasBlockRef(decoder, block_id)
void MemoryContextReset(MemoryContext context)
#define PageGetMaxOffsetNumber(page)
#define XLogRecGetData(decoder)
void UnlockReleaseBuffer(Buffer buffer)
Buffer XLogInitBufferForRedo(XLogReaderState *record, uint8 block_id)
#define FirstOffsetNumber
IndexTupleData * IndexTuple
static void gistRedoPageSplitRecord(XLogReaderState *record)
static IndexTuple * decodePageSplitRecord(char *begin, int len, int *n)
struct SplitedPageLayout * next
#define BufferGetPage(buffer)
#define XLogRecGetInfo(decoder)
#define GistPageIsLeaf(page)
void XLogRegisterData(char *data, int len)
bool XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id, RelFileNode *rnode, ForkNumber *forknum, BlockNumber *blknum)
XLogRecPtr XLogInsert(RmgrId rmid, uint8 info)
#define GistClearFollowRight(page)
#define XLOG_GIST_PAGE_UPDATE
char * XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len)
#define InvalidOffsetNumber
XLogRedoAction XLogReadBufferForRedo(XLogReaderState *record, uint8 block_id, Buffer *buf)
#define GistPageGetOpaque(page)
#define Assert(condition)
void gist_redo(XLogReaderState *record)
void gist_xlog_cleanup(void)
static void gistRedoClearFollowRight(XLogReaderState *record, uint8 block_id)
void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems)
#define OffsetNumberNext(offsetNumber)
#define InvalidBlockNumber
void gist_xlog_startup(void)
#define BufferIsValid(bufnum)
#define GistMarkFollowRight(page)
BlockNumber BufferGetBlockNumber(Buffer buffer)
void GISTInitBuffer(Buffer b, uint32 f)
static MemoryContext opCtx
XLogRecPtr gistXLogUpdate(RelFileNode node, Buffer buffer, OffsetNumber *todelete, int ntodelete, IndexTuple *itup, int ituplen, Buffer leftchildbuf)
void XLogBeginInsert(void)
#define PageSetLSN(page, lsn)
#define IndexTupleSize(itup)
static void gistRedoCreateIndex(XLogReaderState *record)
XLogRecPtr gistXLogSplit(RelFileNode node, BlockNumber blkno, bool page_is_leaf, SplitedPageLayout *dist, BlockNumber origrlink, GistNSN orignsn, Buffer leftchildbuf, bool markfollowright)