45 if (searchMode ==
false)
81 bool rootConflictCheck,
Snapshot snapshot)
91 if (rootConflictCheck)
128 stack->
blkno = rightlink;
149 stack->
blkno = child;
158 stack->
blkno = child;
188 elog(
ERROR,
"right sibling of GIN page is of different type");
308 blkno = leftmostBlkno;
337 Page childpage = NULL;
338 Page newlpage = NULL,
340 void *ptp_workspace = NULL;
351 "ginPlaceToPage temporary context",
377 insertdata, updateblkno,
379 &newlpage, &newrpage);
401 insertdata, updateblkno, ptp_workspace);
418 xlrec.
flags = xlflags;
456 Page newrootpg = NULL;
474 data.flags = xlflags;
483 if (stack->
parent == NULL)
534 data.rrlink = savedRightLink;
566 if (stack->
parent == NULL)
570 memcpy(page, newrootpg, BLCKSZ);
577 memcpy(page, newlpage, BLCKSZ);
600 if (stack->
parent == NULL)
620 if (stack->
parent == NULL)
632 if (stack->
parent == NULL)
640 result = (stack->
parent == NULL);
644 elog(
ERROR,
"invalid return code from GIN beginPlaceToPage method: %d", rc);
679 elog(
DEBUG1,
"finishing incomplete split of block %u in gin index \"%s\"",
733 insertdata, updateblkno,
734 stack->
buffer, buildStats);
743 if (!first || freestack)
#define InvalidBlockNumber
static void BlockIdSet(BlockIdData *blockId, BlockNumber blockNumber)
BlockNumber BufferGetBlockNumber(Buffer buffer)
Buffer ReleaseAndReadBuffer(Buffer buffer, Relation relation, BlockNumber blockNum)
void ReleaseBuffer(Buffer buffer)
void UnlockReleaseBuffer(Buffer buffer)
void MarkBufferDirty(Buffer buffer)
void LockBuffer(Buffer buffer, int mode)
Buffer ReadBuffer(Relation reln, BlockNumber blockNum)
static Page BufferGetPage(Buffer buffer)
static void TestForOldSnapshot(Snapshot snapshot, Relation relation, Page page)
static bool BufferIsValid(Buffer bufnum)
Page PageGetTempPage(Page page)
static void PageSetLSN(Page page, XLogRecPtr lsn)
elog(ERROR, "%s: %s", p2, msg)
#define GinPageGetOpaque(page)
#define GinPageIsData(page)
#define GinPageRightMost(page)
#define GIN_INCOMPLETE_SPLIT
#define GinPageIsLeaf(page)
#define GinPageIsIncompleteSplit(page)
int ginTraverseLock(Buffer buffer, bool searchMode)
void freeGinBtreeStack(GinBtreeStack *stack)
void ginInsertValue(GinBtree btree, GinBtreeStack *stack, void *insertdata, GinStatsData *buildStats)
static bool ginPlaceToPage(GinBtree btree, GinBtreeStack *stack, void *insertdata, BlockNumber updateblkno, Buffer childbuf, GinStatsData *buildStats)
static void ginFindParents(GinBtree btree, GinBtreeStack *stack)
GinBtreeStack * ginFindLeafPage(GinBtree btree, bool searchMode, bool rootConflictCheck, Snapshot snapshot)
static void ginFinishSplit(GinBtree btree, GinBtreeStack *stack, bool freestack, GinStatsData *buildStats)
Buffer ginStepRight(Buffer buffer, Relation index, int lockmode)
void GinInitPage(Page page, uint32 f, Size pageSize)
Buffer GinNewBuffer(Relation index)
#define GIN_INSERT_ISDATA
#define GIN_INSERT_ISLEAF
Assert(fmt[strlen(fmt) - 1] !='\n')
void pfree(void *pointer)
MemoryContext CurrentMemoryContext
void MemoryContextDelete(MemoryContext context)
#define AllocSetContextCreate
#define ALLOCSET_DEFAULT_SIZES
#define START_CRIT_SECTION()
#define END_CRIT_SECTION()
#define InvalidOffsetNumber
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
void PredicateLockPageSplit(Relation relation, BlockNumber oldblkno, BlockNumber newblkno)
void CheckForSerializableConflictIn(Relation relation, ItemPointer tid, BlockNumber blkno)
#define RelationGetRelationName(relation)
#define RelationNeedsWAL(relation)
BlockNumber(* findChildPage)(GinBtree, GinBtreeStack *)
void(* execPlaceToPage)(GinBtree, Buffer, GinBtreeStack *, void *, BlockNumber, void *)
BlockNumber(* getLeftMostChild)(GinBtree, Page)
bool(* isMoveRight)(GinBtree, Page)
GinPlaceToPageRC(* beginPlaceToPage)(GinBtree, Buffer, GinBtreeStack *, void *, BlockNumber, void **, Page *, Page *)
void *(* prepareDownlink)(GinBtree, Buffer)
OffsetNumber(* findChildPtr)(GinBtree, Page, BlockNumber, OffsetNumber)
void(* fillRoot)(GinBtree, Page, BlockNumber, Page, BlockNumber, Page)
struct GinBtreeStack * parent
RelFileLocator rd_locator
void XLogRegisterData(char *data, uint32 len)
XLogRecPtr XLogInsert(RmgrId rmid, uint8 info)
void XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags)
void XLogBeginInsert(void)
#define REGBUF_FORCE_IMAGE