45 if (searchMode ==
false)
81 bool rootConflictCheck)
91 if (rootConflictCheck)
127 stack->
blkno = rightlink;
147 stack->
blkno = child;
156 stack->
blkno = child;
186 elog(
ERROR,
"right sibling of GIN page is of different type");
278 if (buffer != root->
buffer)
310 blkno = leftmostBlkno;
339 Page childpage = NULL;
340 Page newlpage = NULL,
342 void *ptp_workspace = NULL;
353 "ginPlaceToPage temporary context",
379 insertdata, updateblkno,
381 &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 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)
static void ginFinishSplit(GinBtree btree, GinBtreeStack *stack, bool freestack, GinStatsData *buildStats)
Buffer ginStepRight(Buffer buffer, Relation index, int lockmode)
GinBtreeStack * ginFindLeafPage(GinBtree btree, bool searchMode, bool rootConflictCheck)
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