PostgreSQL Source Code
git master
|
#include "postgres.h"
#include "access/gin_private.h"
#include "access/ginxlog.h"
#include "access/xloginsert.h"
#include "lib/ilist.h"
#include "miscadmin.h"
#include "storage/predicate.h"
#include "utils/rel.h"
Go to the source code of this file.
Data Structures | |
struct | disassembledLeaf |
struct | leafSegmentInfo |
Macros | |
#define | GinPostingListSegmentMaxSize 384 |
#define | GinPostingListSegmentTargetSize 256 |
#define | GinPostingListSegmentMinSize 128 |
#define | MinTuplesPerSegment ((GinPostingListSegmentMaxSize - 2) / 6) |
#define GinPostingListSegmentMaxSize 384 |
Definition at line 34 of file gindatapage.c.
#define GinPostingListSegmentMinSize 128 |
Definition at line 36 of file gindatapage.c.
#define GinPostingListSegmentTargetSize 256 |
Definition at line 35 of file gindatapage.c.
#define MinTuplesPerSegment ((GinPostingListSegmentMaxSize - 2) / 6) |
Definition at line 43 of file gindatapage.c.
|
static |
Definition at line 1438 of file gindatapage.c.
References leafSegmentInfo::action, Assert(), dlist_iter::cur, cur, dlist_container, dlist_foreach, dlist_has_next(), dlist_is_empty(), dlist_next_node(), dlist_push_tail(), GIN_SEGMENT_ADDITEMS, GIN_SEGMENT_INSERT, GIN_SEGMENT_REPLACE, GIN_SEGMENT_UNMODIFIED, ginCompareItemPointers(), ginMergeItemPointers(), ginPostingListDecode(), GinPostingListSegmentTargetSize, leafSegmentInfo::items, next, leafSegmentInfo::nitems, leafSegmentInfo::node, palloc(), leafSegmentInfo::seg, disassembledLeaf::segments, and SizeOfGinPostingList.
Referenced by dataBeginPlaceToPageLeaf().
|
static |
Definition at line 869 of file gindatapage.c.
References generate_unaccent_rules::action, leafSegmentInfo::action, dlist_iter::cur, dlist_container, dlist_foreach, elog(), ERROR, GIN_SEGMENT_ADDITEMS, GIN_SEGMENT_DELETE, GIN_SEGMENT_INSERT, GIN_SEGMENT_REPLACE, GIN_SEGMENT_UNMODIFIED, leafSegmentInfo::modifieditems, ginxlogRecompressDataLeaf::nactions, leafSegmentInfo::nmodifieditems, palloc(), leafSegmentInfo::seg, disassembledLeaf::segments, SHORTALIGN, SizeOfGinPostingList, disassembledLeaf::walinfo, and disassembledLeaf::walinfolen.
Referenced by dataBeginPlaceToPageLeaf(), and ginVacuumPostingTreeLeaf().
BlockNumber createPostingTree | ( | Relation | index, |
ItemPointerData * | items, | ||
uint32 | nitems, | ||
GinStatsData * | buildStats, | ||
Buffer | entrybuffer | ||
) |
Definition at line 1769 of file gindatapage.c.
References BufferGetBlockNumber(), BufferGetPage(), data, DEBUG2, elog(), END_CRIT_SECTION, GIN_COMPRESSED, GIN_DATA, GIN_LEAF, ginCompressPostingList(), GinDataLeafPageGetPostingList, GinDataPageMaxDataSize, GinDataPageSetDataSize, GinInitPage(), ginInsertItemPointers(), GinNewBuffer(), GinPageGetOpaque, GinPostingListSegmentMaxSize, InvalidBlockNumber, MarkBufferDirty(), GinStatsData::nDataPages, nitems, PageRestoreTempPage(), PageSetLSN(), palloc(), pfree(), PredicateLockPageSplit(), REGBUF_WILL_INIT, RelationNeedsWAL, SizeOfGinPostingList, START_CRIT_SECTION, UnlockReleaseBuffer(), XLOG_GIN_CREATE_PTREE, XLogBeginInsert(), XLogInsert(), XLogRegisterBuffer(), and XLogRegisterData().
Referenced by addItemPointersToLeafTuple(), and buildFreshLeafTuple().
|
static |
Definition at line 1195 of file gindatapage.c.
References Assert(), buf, BufferGetPage(), dataBeginPlaceToPageInternal(), dataBeginPlaceToPageLeaf(), GinPageIsData, and GinPageIsLeaf.
Referenced by ginPrepareDataScan().
|
static |
Definition at line 1116 of file gindatapage.c.
References buf, BufferGetPage(), dataSplitPageInternal(), GinNonLeafDataPageGetFreeSpace, GPTP_INSERT, and GPTP_SPLIT.
Referenced by dataBeginPlaceToPage().
|
static |
Definition at line 448 of file gindatapage.c.
References leafSegmentInfo::action, addItemsToLeaf(), Assert(), buf, BufferGetBlockNumber(), BufferGetPage(), computeLeafRecompressWALData(), GinBtreeDataLeafInsertData::curitem, dataPlaceToPageLeafSplit(), DEBUG2, disassembleLeaf(), dlist_container, dlist_has_prev(), dlist_is_empty(), dlist_prev_node(), dlist_tail_node(), elog(), ERROR, GIN_SEGMENT_DELETE, ginCompareItemPointers(), GinDataLeafPageGetFreeSpace, GinDataPageGetRightBound, GinDataPageMaxDataSize, GinPageIsCompressed, GinPageRightMost, ginPostingListDecode(), GinPostingListSegmentMaxSize, GPTP_INSERT, GPTP_NO_WORK, GPTP_SPLIT, i, GinBtreeData::index, GinBtreeData::isBuild, ItemPointerCompare(), ItemPointerIsValid(), ItemPointerSetMin, leafSegmentInfo::items, GinBtreeDataLeafInsertData::items, disassembledLeaf::lastleft, leafRepackItems(), disassembledLeaf::lsize, Min, MinTuplesPerSegment, GinBtreeDataLeafInsertData::nitem, leafSegmentInfo::nitems, palloc(), RelationNeedsWAL, remaining, disassembledLeaf::rsize, leafSegmentInfo::seg, disassembledLeaf::segments, and SizeOfGinPostingList.
Referenced by dataBeginPlaceToPage().
|
static |
Definition at line 1225 of file gindatapage.c.
References buf, BufferGetPage(), dataExecPlaceToPageInternal(), dataExecPlaceToPageLeaf(), and GinPageIsLeaf.
Referenced by ginPrepareDataScan().
|
static |
Definition at line 1142 of file gindatapage.c.
References buf, BufferGetPage(), data, GinDataPageAddPostingItem(), GinDataPageGetPostingItem, GinBtreeData::index, GinBtreeData::isBuild, GinBtreeStack::off, PostingItemSetBlockNumber, RelationNeedsWAL, and XLogRegisterBufData().
Referenced by dataExecPlaceToPage().
|
static |
Definition at line 716 of file gindatapage.c.
References buf, dataPlaceToPageLeafRecompress(), GinBtreeData::index, GinBtreeData::isBuild, RelationNeedsWAL, disassembledLeaf::walinfo, disassembledLeaf::walinfolen, and XLogRegisterBufData().
Referenced by dataExecPlaceToPage().
|
static |
Definition at line 319 of file gindatapage.c.
References Assert(), FirstOffsetNumber, GinDataPageGetPostingItem, GinPageGetOpaque, GinPageIsData, GinPageIsLeaf, i, InvalidOffsetNumber, and PostingItemGetBlockNumber.
Referenced by ginPrepareDataScan().
|
static |
Definition at line 364 of file gindatapage.c.
References Assert(), FirstOffsetNumber, GinDataPageGetPostingItem, GinPageGetOpaque, GinPageIsData, GinPageIsLeaf, and PostingItemGetBlockNumber.
Referenced by ginPrepareDataScan().
Definition at line 234 of file gindatapage.c.
References ginCompareItemPointers(), GinDataPageGetRightBound, GinPageIsDeleted, GinPageRightMost, and GinBtreeData::itemptr.
Referenced by ginPrepareDataScan().
|
static |
Definition at line 211 of file gindatapage.c.
References Assert(), GinDataPageGetData, GinPageGetOpaque, GinPageIsCompressed, and nitems.
Referenced by disassembleLeaf(), GinDataLeafPageGetItems(), and GinDataLeafPageGetItemsToTbm().
|
static |
Definition at line 252 of file gindatapage.c.
References Assert(), GinBtreeStack::buffer, BufferGetPage(), FirstOffsetNumber, GinBtreeData::fullScan, GinBtreeData::getLeftMostChild, ginCompareItemPointers(), GinDataPageGetPostingItem, GinPageGetOpaque, GinPageIsData, GinPageIsLeaf, GinBtreeData::itemptr, PostingItem::key, GinBtreeStack::off, PostingItemGetBlockNumber, and GinBtreeStack::predictNumber.
Referenced by ginPrepareDataScan().
|
static |
Definition at line 975 of file gindatapage.c.
References leafSegmentInfo::action, Assert(), buf, BufferGetPage(), dlist_iter::cur, dlist_container, dlist_foreach, GIN_SEGMENT_DELETE, GIN_SEGMENT_UNMODIFIED, GinDataLeafPageGetPostingList, GinDataPageMaxDataSize, GinDataPageSetDataSize, GinPageGetOpaque, GinPageIsCompressed, GinPageSetCompressed, InvalidOffsetNumber, disassembledLeaf::oldformat, leafSegmentInfo::seg, disassembledLeaf::segments, and SizeOfGinPostingList.
Referenced by dataExecPlaceToPageLeaf(), and ginVacuumPostingTreeLeaf().
|
static |
Definition at line 1031 of file gindatapage.c.
References leafSegmentInfo::action, Assert(), dlist_container, dlist_has_next(), dlist_head_node(), dlist_next_node(), GIN_COMPRESSED, GIN_DATA, GIN_LEAF, GIN_SEGMENT_DELETE, GinDataLeafPageGetPostingList, GinDataPageGetRightBound, GinDataPageSetDataSize, GinInitPage(), disassembledLeaf::lastleft, disassembledLeaf::lsize, disassembledLeaf::rsize, leafSegmentInfo::seg, disassembledLeaf::segments, and SizeOfGinPostingList.
Referenced by dataBeginPlaceToPageLeaf().
Definition at line 1327 of file gindatapage.c.
References BufferGetBlockNumber(), BufferGetPage(), GinDataPageGetRightBound, PostingItem::key, palloc(), and PostingItemSetBlockNumber.
Referenced by ginPrepareDataScan().
|
static |
Definition at line 1246 of file gindatapage.c.
References BufferGetPage(), FirstOffsetNumber, GinDataPageGetPostingItem, GinDataPageGetRightBound, GinDataPageSetDataSize, GinInitPage(), GinNonLeafDataPageGetFreeSpace, GinPageGetOpaque, GinPageRightMost, GinBtreeData::isBuild, nitems, GinBtreeStack::off, PageGetPageSize(), PageGetTempPage(), and PostingItemSetBlockNumber.
Referenced by dataBeginPlaceToPageInternal().
|
static |
Definition at line 1364 of file gindatapage.c.
References leafSegmentInfo::action, dataLeafPageGetUncompressed(), dlist_init(), dlist_push_tail(), GIN_SEGMENT_REPLACE, GIN_SEGMENT_UNMODIFIED, GinDataLeafPageGetPostingList, GinDataLeafPageGetPostingListSize, GinNextPostingListSegment, GinPageIsCompressed, leafSegmentInfo::items, leafSegmentInfo::nitems, leafSegmentInfo::node, disassembledLeaf::oldformat, palloc(), palloc0(), leafSegmentInfo::seg, and disassembledLeaf::segments.
Referenced by dataBeginPlaceToPageLeaf(), and ginVacuumPostingTreeLeaf().
void ginDataFillRoot | ( | GinBtree | btree, |
Page | root, | ||
BlockNumber | lblkno, | ||
Page | lpage, | ||
BlockNumber | rblkno, | ||
Page | rpage | ||
) |
Definition at line 1343 of file gindatapage.c.
References GinDataPageAddPostingItem(), GinDataPageGetRightBound, InvalidOffsetNumber, PostingItem::key, and PostingItemSetBlockNumber.
Referenced by ginPrepareDataScan().
ItemPointer GinDataLeafPageGetItems | ( | Page | page, |
int * | nitems, | ||
ItemPointerData | advancePast | ||
) |
Definition at line 135 of file gindatapage.c.
References dataLeafPageGetUncompressed(), ginCompareItemPointers(), GinDataLeafPageGetPostingList, GinDataLeafPageGetPostingListSize, GinNextPostingListSegment, GinPageIsCompressed, ginPostingListDecodeAllSegments(), ItemPointerIsValid(), len, next, nitems, and palloc().
Referenced by entryLoadMoreItems(), and startScanEntry().
Definition at line 182 of file gindatapage.c.
References dataLeafPageGetUncompressed(), GinDataLeafPageGetPostingList, GinDataLeafPageGetPostingListSize, GinPageIsCompressed, ginPostingListDecodeAllSegmentsToTbm(), len, nitems, and tbm_add_tuples().
Referenced by scanPostingTree().
void GinDataPageAddPostingItem | ( | Page | page, |
PostingItem * | data, | ||
OffsetNumber | offset | ||
) |
Definition at line 380 of file gindatapage.c.
References Assert(), data, GinDataPageGetPostingItem, GinDataPageSetDataSize, GinPageGetOpaque, GinPageIsLeaf, InvalidBlockNumber, InvalidOffsetNumber, and PostingItemGetBlockNumber.
Referenced by dataExecPlaceToPageInternal(), ginDataFillRoot(), and ginRedoInsertData().
void ginInsertItemPointers | ( | Relation | index, |
BlockNumber | rootBlkno, | ||
ItemPointerData * | items, | ||
uint32 | nitem, | ||
GinStatsData * | buildStats | ||
) |
Definition at line 1902 of file gindatapage.c.
References GinBtreeDataLeafInsertData::curitem, ginFindLeafPage(), ginInsertValue(), ginPrepareDataScan(), GinBtreeData::isBuild, GinBtreeData::itemptr, GinBtreeDataLeafInsertData::items, and GinBtreeDataLeafInsertData::nitem.
Referenced by addItemPointersToLeafTuple(), createPostingTree(), and ginEntryInsert().
void GinPageDeletePostingItem | ( | Page | page, |
OffsetNumber | offset | ||
) |
Definition at line 417 of file gindatapage.c.
References Assert(), FirstOffsetNumber, GinDataPageGetPostingItem, GinDataPageSetDataSize, GinPageGetOpaque, and GinPageIsLeaf.
Referenced by ginDeletePage(), and ginRedoDeletePage().
|
static |
Definition at line 1876 of file gindatapage.c.
References GinBtreeData::beginPlaceToPage, dataBeginPlaceToPage(), dataExecPlaceToPage(), dataFindChildPtr(), dataGetLeftMostPage(), dataIsMoveRight(), dataLocateItem(), dataPrepareDownlink(), GinBtreeData::execPlaceToPage, GinBtreeData::fillRoot, GinBtreeData::findChildPage, GinBtreeData::findChildPtr, GinBtreeData::findItem, GinBtreeData::fullScan, GinBtreeData::getLeftMostChild, ginDataFillRoot(), GinBtreeData::index, GinBtreeData::isBuild, GinBtreeData::isData, GinBtreeData::isMoveRight, GinBtreeData::prepareDownlink, and GinBtreeData::rootBlkno.
Referenced by ginInsertItemPointers(), and ginScanBeginPostingTree().
GinBtreeStack* ginScanBeginPostingTree | ( | GinBtree | btree, |
Relation | index, | ||
BlockNumber | rootBlkno | ||
) |
Definition at line 1930 of file gindatapage.c.
References GinBtreeData::fullScan, ginFindLeafPage(), and ginPrepareDataScan().
Referenced by scanPostingTree(), and startScanEntry().
void ginVacuumPostingTreeLeaf | ( | Relation | indexrel, |
Buffer | buffer, | ||
GinVacuumState * | gvs | ||
) |
Definition at line 735 of file gindatapage.c.
References leafSegmentInfo::action, BufferGetPage(), computeLeafRecompressWALData(), dlist_iter::cur, dataPlaceToPageLeafRecompress(), disassembleLeaf(), dlist_container, dlist_foreach, elog(), END_CRIT_SECTION, ERROR, GIN_SEGMENT_DELETE, GIN_SEGMENT_REPLACE, GIN_SEGMENT_UNMODIFIED, ginCompressPostingList(), GinDataPageMaxDataSize, ginPostingListDecode(), ginVacuumItemPointers(), leafSegmentInfo::items, MarkBufferDirty(), leafSegmentInfo::nitems, PageSetLSN(), palloc(), pfree(), REGBUF_STANDARD, RelationNeedsWAL, leafSegmentInfo::seg, disassembledLeaf::segments, SizeOfGinPostingList, START_CRIT_SECTION, disassembledLeaf::walinfo, disassembledLeaf::walinfolen, XLOG_GIN_VACUUM_DATA_LEAF_PAGE, XLogBeginInsert(), XLogInsert(), XLogRegisterBufData(), and XLogRegisterBuffer().
Referenced by ginVacuumPostingTreeLeaves().
|
static |
Definition at line 1565 of file gindatapage.c.
References leafSegmentInfo::action, Assert(), dlist_iter::cur, dlist_container, dlist_delete(), dlist_foreach, dlist_has_next(), dlist_head_node(), dlist_insert_after(), dlist_next_node(), dlist_prev_node(), GinPostingList::first, GIN_SEGMENT_DELETE, GIN_SEGMENT_INSERT, GIN_SEGMENT_REPLACE, GIN_SEGMENT_UNMODIFIED, ginCompressPostingList(), GinDataPageMaxDataSize, ginMergeItemPointers(), ginPostingListDecode(), GinPostingListSegmentMaxSize, GinPostingListSegmentMinSize, GinPostingListSegmentTargetSize, ItemPointerSetInvalid(), leafSegmentInfo::items, disassembledLeaf::lastleft, disassembledLeaf::lsize, leafSegmentInfo::modifieditems, leafSegmentInfo::nitems, leafSegmentInfo::nmodifieditems, leafSegmentInfo::node, palloc(), pfree(), remaining, disassembledLeaf::rsize, leafSegmentInfo::seg, disassembledLeaf::segments, and SizeOfGinPostingList.
Referenced by dataBeginPlaceToPageLeaf().