89 newsize =
Max(newsize, minsize);
109 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
110 errmsg(
"index row size %zu exceeds maximum %zu for index \"%s\"",
142 memcpy(ptr,
data, dataSize);
176 if (nipd != ndecoded)
177 elog(
ERROR,
"number of items mismatch in GIN entry tuple, %d in tuple header, %d decoded",
213 memcpy(nitup, itup, origsize);
216 nitup->
t_info |= origsize;
426 for (
i = storedOff + 1;
i <= maxoff;
i++)
432 maxoff = storedOff - 1;
530 void **ptp_workspace,
571 elog(
ERROR,
"failed to add item to index page in \"%s\"",
628 ptr = tupstore[0].
data;
634 memcpy(ptr, insertData->
entry, size);
641 memcpy(ptr, itup, size);
646 if (off == maxoff + 1)
649 memcpy(ptr, insertData->
entry, size);
661 ptr = tupstore[0].
data;
674 if (lsize > totalsize / 2)
686 elog(
ERROR,
"failed to add item to index page in \"%s\"",
729 elog(
ERROR,
"failed to add item to index root page");
734 elog(
ERROR,
"failed to add item to index root page");
#define InvalidBlockNumber
BlockNumber BufferGetBlockNumber(Buffer buffer)
static Page BufferGetPage(Buffer buffer)
void PageIndexTupleDelete(Page page, OffsetNumber offnum)
Page PageGetTempPageCopy(Page page)
Size PageGetFreeSpace(Page page)
static Item PageGetItem(Page page, ItemId itemId)
static Size PageGetPageSize(Page page)
static ItemId PageGetItemId(Page page, OffsetNumber offsetNumber)
static OffsetNumber PageGetMaxOffsetNumber(Page page)
#define PageAddItem(page, item, size, offsetNumber, overwrite, is_heap)
elog(ERROR, "%s: %s", p2, msg)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
#define GinIsPostingTree(itup)
#define GinPageGetOpaque(page)
#define GinCategoryOffset(itup, ginstate)
#define GinGetPosting(itup)
#define GinGetDownlink(itup)
#define GinSetNPosting(itup, n)
#define GinItupIsCompressed(itup)
#define GinSetPostingOffset(itup, n)
#define GinSetDownlink(itup, blkno)
#define GinGetNPosting(itup)
#define GinGetPostingOffset(itup)
#define GinPageIsData(page)
signed char GinNullCategory
#define GinPageRightMost(page)
#define GinSetNullCategory(itup, ginstate, c)
#define GinPageIsLeaf(page)
void ginEntryFillRoot(GinBtree btree, Page root, BlockNumber lblkno, Page lpage, BlockNumber rblkno, Page rpage)
static void entryPreparePage(GinBtree btree, Page page, OffsetNumber off, GinBtreeEntryInsertData *insertData, BlockNumber updateblkno)
static bool entryLocateLeafEntry(GinBtree btree, GinBtreeStack *stack)
static bool entryIsMoveRight(GinBtree btree, Page page)
static BlockNumber entryGetLeftMostPage(GinBtree btree, Page page)
static void entrySplitPage(GinBtree btree, Buffer origbuf, GinBtreeStack *stack, GinBtreeEntryInsertData *insertData, BlockNumber updateblkno, Page *newlpage, Page *newrpage)
static IndexTuple getRightMostTuple(Page page)
static void * entryPrepareDownlink(GinBtree btree, Buffer lbuf)
static IndexTuple GinFormInteriorTuple(IndexTuple itup, Page page, BlockNumber childblk)
static OffsetNumber entryFindChildPtr(GinBtree btree, Page page, BlockNumber blkno, OffsetNumber storedOff)
static bool entryIsEnoughSpace(GinBtree btree, Buffer buf, OffsetNumber off, GinBtreeEntryInsertData *insertData)
static GinPlaceToPageRC entryBeginPlaceToPage(GinBtree btree, Buffer buf, GinBtreeStack *stack, void *insertPayload, BlockNumber updateblkno, void **ptp_workspace, Page *newlpage, Page *newrpage)
ItemPointer ginReadTuple(GinState *ginstate, OffsetNumber attnum, IndexTuple itup, int *nitems)
static void entryExecPlaceToPage(GinBtree btree, Buffer buf, GinBtreeStack *stack, void *insertPayload, BlockNumber updateblkno, void *ptp_workspace)
static BlockNumber entryLocateEntry(GinBtree btree, GinBtreeStack *stack)
IndexTuple GinFormTuple(GinState *ginstate, OffsetNumber attnum, Datum key, GinNullCategory category, Pointer data, Size dataSize, int nipd, bool errorTooBig)
void ginPrepareEntryScan(GinBtree btree, OffsetNumber attnum, Datum key, GinNullCategory category, GinState *ginstate)
ItemPointer ginPostingListDecode(GinPostingList *plist, int *ndecoded_out)
void GinInitPage(Page page, uint32 f, Size pageSize)
OffsetNumber gintuple_get_attrnum(GinState *ginstate, IndexTuple tuple)
int ginCompareAttEntries(GinState *ginstate, OffsetNumber attnuma, Datum a, GinNullCategory categorya, OffsetNumber attnumb, Datum b, GinNullCategory categoryb)
Datum gintuple_get_key(GinState *ginstate, IndexTuple tuple, GinNullCategory *category)
IndexTuple index_form_tuple(TupleDesc tupleDescriptor, Datum *values, bool *isnull)
struct ItemIdData ItemIdData
ItemPointerData * ItemPointer
#define IndexTupleHasNulls(itup)
IndexTupleData * IndexTuple
#define IndexTupleSize(itup)
Assert(fmt[strlen(fmt) - 1] !='\n')
void pfree(void *pointer)
void * repalloc(void *pointer, Size size)
#define InvalidOffsetNumber
#define FirstOffsetNumber
static Datum UInt16GetDatum(uint16 X)
#define RelationGetRelationName(relation)
#define RelationNeedsWAL(relation)
BlockNumber(* findChildPage)(GinBtree, GinBtreeStack *)
void(* execPlaceToPage)(GinBtree, Buffer, GinBtreeStack *, void *, BlockNumber, void *)
BlockNumber(* getLeftMostChild)(GinBtree, Page)
bool(* findItem)(GinBtree, GinBtreeStack *)
bool(* isMoveRight)(GinBtree, Page)
GinPlaceToPageRC(* beginPlaceToPage)(GinBtree, Buffer, GinBtreeStack *, void *, BlockNumber, void **, Page *, Page *)
GinNullCategory entryCategory
void *(* prepareDownlink)(GinBtree, Buffer)
OffsetNumber(* findChildPtr)(GinBtree, Page, BlockNumber, OffsetNumber)
void(* fillRoot)(GinBtree, Page, BlockNumber, Page, BlockNumber, Page)
TupleDesc tupdesc[INDEX_MAX_KEYS]
void XLogRegisterBufData(uint8 block_id, char *data, uint32 len)