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 1444 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 872 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 1775 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, items, 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 1201 of file gindatapage.c.
References Assert(), buf, BufferGetPage(), dataBeginPlaceToPageInternal(), dataBeginPlaceToPageLeaf(), GinPageIsData, and GinPageIsLeaf.
Referenced by ginPrepareDataScan().
|
static |
Definition at line 1119 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(), 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, items, disassembledLeaf::lastleft, leafRepackItems(), disassembledLeaf::lsize, Min, MinTuplesPerSegment, leafSegmentInfo::nitems, palloc(), RelationNeedsWAL, remaining, disassembledLeaf::rsize, leafSegmentInfo::seg, disassembledLeaf::segments, and SizeOfGinPostingList.
Referenced by dataBeginPlaceToPage().
|
static |
Definition at line 1231 of file gindatapage.c.
References buf, BufferGetPage(), dataExecPlaceToPageInternal(), dataExecPlaceToPageLeaf(), and GinPageIsLeaf.
Referenced by ginPrepareDataScan().
|
static |
Definition at line 1145 of file gindatapage.c.
References buf, BufferGetPage(), data, GinDataPageAddPostingItem(), GinDataPageGetPostingItem, GinBtreeData::index, GinBtreeData::isBuild, MarkBufferDirty(), GinBtreeStack::off, PostingItemSetBlockNumber, REGBUF_STANDARD, RelationNeedsWAL, XLogRegisterBufData(), and XLogRegisterBuffer().
Referenced by dataExecPlaceToPage().
|
static |
Definition at line 716 of file gindatapage.c.
References buf, dataPlaceToPageLeafRecompress(), GinBtreeData::index, GinBtreeData::isBuild, MarkBufferDirty(), REGBUF_STANDARD, RelationNeedsWAL, disassembledLeaf::walinfo, disassembledLeaf::walinfolen, XLogRegisterBufData(), and XLogRegisterBuffer().
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, items, 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 978 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 1034 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 1333 of file gindatapage.c.
References BufferGetBlockNumber(), BufferGetPage(), GinDataPageGetRightBound, PostingItem::key, palloc(), and PostingItemSetBlockNumber.
Referenced by ginPrepareDataScan().
|
static |
Definition at line 1252 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 1370 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 1349 of file gindatapage.c.
References GinDataPageAddPostingItem(), GinDataPageGetRightBound, InvalidOffsetNumber, PostingItem::key, PostingItemSetBlockNumber, and root.
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 1908 of file gindatapage.c.
References GinBtreeDataLeafInsertData::curitem, ginFindLeafPage(), ginInsertValue(), ginPrepareDataScan(), GinBtreeData::isBuild, GinBtreeData::itemptr, GinBtreeDataLeafInsertData::items, 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 1882 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 1936 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 738 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 1571 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().