58 elog(
ERROR,
"SPGiST tuple to be replaced is not a placeholder");
68 if (
PageAddItem(page, tuple, size, offset,
false,
false) != offset)
69 elog(
ERROR,
"failed to add item of size %u to SPGiST index page",
131 leafTuple, leafTupleHdr.
size,
133 elog(
ERROR,
"failed to add item of size %u to SPGiST index page",
221 for (
i = 0;
i < nInsert;
i++)
231 memcpy(&leafTupleHdr, leafTuple,
235 ptr += leafTupleHdr.
size;
253 toInsert[nInsert - 1]);
272 blknoDst, toInsert[nInsert - 1]);
312 false,
false) != xldata->
offnum)
313 elog(
ERROR,
"failed to add item of size %u to SPGiST index page",
392 false,
false) != xldata->
offnum)
393 elog(
ERROR,
"failed to add item of size %u to SPGiST index page",
465 ptr += prefixTupleHdr.
size;
509 elog(
ERROR,
"failed to add item of size %u to SPGiST index page",
510 prefixTupleHdr.
size);
533 uint8 *leafPageSelect;
553 leafPageSelect = (
uint8 *) ptr;
559 ptr += innerTupleHdr.
size;
653 ptr += leafTupleHdr.
size;
655 page = leafPageSelect[
i] ? destPage : srcPage;
668 if (destPage != NULL)
779 toDead, xldata->
nDead,
803 moveSrc, xldata->
nMove,
860 itemToPlaceholder = xldata->
offsets;
960 elog(
PANIC,
"spg_redo: unknown op code %u", info);
971 "SP-GiST temporary context",
#define InvalidBlockNumber
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)
void PageIndexTupleDelete(Page page, OffsetNumber offnum)
PageHeaderData * PageHeader
static void * PageGetItem(const PageData *page, const ItemIdData *itemId)
#define SizeOfPageHeaderData
static ItemId PageGetItemId(Page page, OffsetNumber offsetNumber)
static void PageSetLSN(Page page, XLogRecPtr lsn)
#define PageAddItem(page, item, size, offsetNumber, overwrite, is_heap)
static OffsetNumber PageGetMaxOffsetNumber(const PageData *page)
Assert(PointerIsAligned(start, uint64))
static void ItemPointerSetInvalid(ItemPointerData *pointer)
void MemoryContextReset(MemoryContext context)
void pfree(void *pointer)
void * palloc0(Size size)
MemoryContext CurrentMemoryContext
void MemoryContextDelete(MemoryContext context)
#define AllocSetContextCreate
#define ALLOCSET_DEFAULT_SIZES
#define InvalidOffsetNumber
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
void spgPageIndexMultiDelete(SpGistState *state, Page page, OffsetNumber *itemnos, int nitems, int firststate, int reststate, BlockNumber blkno, OffsetNumber offnum)
void spgUpdateNodeLink(SpGistInnerTuple tup, int nodeN, BlockNumber blkno, OffsetNumber offset)
SpGistDeadTupleData * SpGistDeadTuple
SpGistInnerTupleData * SpGistInnerTuple
#define SGLT_GET_NEXTOFFSET(spgLeafTuple)
#define SPGIST_PLACEHOLDER
#define SGLT_SET_NEXTOFFSET(spgLeafTuple, offsetNumber)
struct SpGistLeafTupleData * SpGistLeafTuple
#define SpGistPageGetOpaque(page)
SpGistDeadTuple spgFormDeadTuple(SpGistState *state, int tupstate, BlockNumber blkno, OffsetNumber offnum)
void SpGistInitBuffer(Buffer b, uint16 f)
static void addOrReplaceTuple(Page page, const void *tuple, int size, OffsetNumber offset)
void spg_redo(XLogReaderState *record)
static void spgRedoVacuumRoot(XLogReaderState *record)
static void spgRedoSplitTuple(XLogReaderState *record)
static void spgRedoVacuumRedirect(XLogReaderState *record)
void spg_xlog_cleanup(void)
void spg_mask(char *pagedata, BlockNumber blkno)
static void spgRedoMoveLeafs(XLogReaderState *record)
static void fillFakeState(SpGistState *state, spgxlogState stateSrc)
void spg_xlog_startup(void)
static void spgRedoAddNode(XLogReaderState *record)
static MemoryContext opCtx
static void spgRedoVacuumLeaf(XLogReaderState *record)
static void spgRedoPickSplit(XLogReaderState *record)
static void spgRedoAddLeaf(XLogReaderState *record)
struct spgxlogSplitTuple spgxlogSplitTuple
#define XLOG_SPGIST_SPLIT_TUPLE
#define SizeOfSpgxlogPickSplit
#define XLOG_SPGIST_VACUUM_ROOT
struct spgxlogAddLeaf spgxlogAddLeaf
#define SizeOfSpgxlogVacuumLeaf
#define SizeOfSpgxlogMoveLeafs
#define XLOG_SPGIST_VACUUM_LEAF
#define XLOG_SPGIST_ADD_NODE
#define XLOG_SPGIST_ADD_LEAF
struct spgxlogAddNode spgxlogAddNode
#define XLOG_SPGIST_MOVE_LEAFS
#define XLOG_SPGIST_PICKSPLIT
#define XLOG_SPGIST_VACUUM_REDIRECT
void ResolveRecoveryConflictWithSnapshot(TransactionId snapshotConflictHorizon, bool isCatalogRel, RelFileLocator locator)
OffsetNumber offnumHeadLeaf
OffsetNumber offnumParent
OffsetNumber offnumParent
OffsetNumber offnumParent
OffsetNumber offnumParent
OffsetNumber offnumPostfix
OffsetNumber offnumPrefix
TransactionId redirectXid
OffsetNumber firstPlaceholder
TransactionId snapshotConflictHorizon
OffsetNumber offsets[FLEXIBLE_ARRAY_MEMBER]
OffsetNumber offsets[FLEXIBLE_ARRAY_MEMBER]
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)