PostgreSQL Source Code git master
|
#include "access/amapi.h"
#include "access/itup.h"
#include "access/sdir.h"
#include "access/tableam.h"
#include "access/xlogreader.h"
#include "catalog/pg_am_d.h"
#include "catalog/pg_index.h"
#include "lib/stringinfo.h"
#include "storage/bufmgr.h"
#include "storage/shm_toc.h"
Go to the source code of this file.
Data Structures | |
struct | BTPageOpaqueData |
struct | BTMetaPageData |
struct | BTDeletedPageData |
struct | BTPendingFSM |
struct | BTVacState |
struct | BTStackData |
struct | BTScanInsertData |
struct | BTInsertStateData |
struct | BTDedupInterval |
struct | BTDedupStateData |
struct | BTVacuumPostingData |
struct | BTScanPosItem |
struct | BTScanPosData |
struct | BTArrayKeyInfo |
struct | BTScanOpaqueData |
struct | BTReadPageState |
struct | BTOptions |
Macros | |
#define | BTPageGetOpaque(page) ((BTPageOpaque) PageGetSpecialPointer(page)) |
#define | BTP_LEAF (1 << 0) /* leaf page, i.e. not internal page */ |
#define | BTP_ROOT (1 << 1) /* root page (has no parent) */ |
#define | BTP_DELETED (1 << 2) /* page has been deleted from tree */ |
#define | BTP_META (1 << 3) /* meta-page */ |
#define | BTP_HALF_DEAD (1 << 4) /* empty, but still in tree */ |
#define | BTP_SPLIT_END (1 << 5) /* rightmost page of split group */ |
#define | BTP_HAS_GARBAGE (1 << 6) /* page has LP_DEAD tuples (deprecated) */ |
#define | BTP_INCOMPLETE_SPLIT (1 << 7) /* right sibling's downlink is missing */ |
#define | BTP_HAS_FULLXID (1 << 8) /* contains BTDeletedPageData */ |
#define | MAX_BT_CYCLE_ID 0xFF7F |
#define | BTPageGetMeta(p) ((BTMetaPageData *) PageGetContents(p)) |
#define | BTREE_METAPAGE 0 /* first page is meta */ |
#define | BTREE_MAGIC 0x053162 /* magic number in metapage */ |
#define | BTREE_VERSION 4 /* current version number */ |
#define | BTREE_MIN_VERSION 2 /* minimum supported version */ |
#define | BTREE_NOVAC_VERSION 3 /* version with all meta fields set */ |
#define | BTMaxItemSize(page) |
#define | BTMaxItemSizeNoHeapTid(page) |
#define | MaxTIDsPerBTreePage |
#define | BTREE_MIN_FILLFACTOR 10 |
#define | BTREE_DEFAULT_FILLFACTOR 90 |
#define | BTREE_NONLEAF_FILLFACTOR 70 |
#define | BTREE_SINGLEVAL_FILLFACTOR 96 |
#define | P_NONE 0 |
#define | P_LEFTMOST(opaque) ((opaque)->btpo_prev == P_NONE) |
#define | P_RIGHTMOST(opaque) ((opaque)->btpo_next == P_NONE) |
#define | P_ISLEAF(opaque) (((opaque)->btpo_flags & BTP_LEAF) != 0) |
#define | P_ISROOT(opaque) (((opaque)->btpo_flags & BTP_ROOT) != 0) |
#define | P_ISDELETED(opaque) (((opaque)->btpo_flags & BTP_DELETED) != 0) |
#define | P_ISMETA(opaque) (((opaque)->btpo_flags & BTP_META) != 0) |
#define | P_ISHALFDEAD(opaque) (((opaque)->btpo_flags & BTP_HALF_DEAD) != 0) |
#define | P_IGNORE(opaque) (((opaque)->btpo_flags & (BTP_DELETED|BTP_HALF_DEAD)) != 0) |
#define | P_HAS_GARBAGE(opaque) (((opaque)->btpo_flags & BTP_HAS_GARBAGE) != 0) |
#define | P_INCOMPLETE_SPLIT(opaque) (((opaque)->btpo_flags & BTP_INCOMPLETE_SPLIT) != 0) |
#define | P_HAS_FULLXID(opaque) (((opaque)->btpo_flags & BTP_HAS_FULLXID) != 0) |
#define | P_HIKEY ((OffsetNumber) 1) |
#define | P_FIRSTKEY ((OffsetNumber) 2) |
#define | P_FIRSTDATAKEY(opaque) (P_RIGHTMOST(opaque) ? P_HIKEY : P_FIRSTKEY) |
#define | INDEX_ALT_TID_MASK INDEX_AM_RESERVED_BIT |
#define | BT_OFFSET_MASK 0x0FFF |
#define | BT_STATUS_OFFSET_MASK 0xF000 |
#define | BT_PIVOT_HEAP_TID_ATTR 0x1000 |
#define | BT_IS_POSTING 0x2000 |
#define | BTreeTupleGetNAtts(itup, rel) |
#define | BTCommuteStrategyNumber(strat) (BTMaxStrategyNumber + 1 - (strat)) |
#define | BTORDER_PROC 1 |
#define | BTSORTSUPPORT_PROC 2 |
#define | BTINRANGE_PROC 3 |
#define | BTEQUALIMAGE_PROC 4 |
#define | BTOPTIONS_PROC 5 |
#define | BTNProcs 5 |
#define | BT_READ BUFFER_LOCK_SHARE |
#define | BT_WRITE BUFFER_LOCK_EXCLUSIVE |
#define | BTScanPosIsPinned(scanpos) |
#define | BTScanPosUnpin(scanpos) |
#define | BTScanPosUnpinIfPinned(scanpos) |
#define | BTScanPosIsValid(scanpos) |
#define | BTScanPosInvalidate(scanpos) |
#define | SK_BT_REQFWD 0x00010000 /* required to continue forward scan */ |
#define | SK_BT_REQBKWD 0x00020000 /* required to continue backward scan */ |
#define | SK_BT_INDOPTION_SHIFT 24 /* must clear the above bits */ |
#define | SK_BT_DESC (INDOPTION_DESC << SK_BT_INDOPTION_SHIFT) |
#define | SK_BT_NULLS_FIRST (INDOPTION_NULLS_FIRST << SK_BT_INDOPTION_SHIFT) |
#define | BTGetFillFactor(relation) |
#define | BTGetTargetPageFreeSpace(relation) (BLCKSZ * (100 - BTGetFillFactor(relation)) / 100) |
#define | BTGetDeduplicateItems(relation) |
#define | PROGRESS_BTREE_PHASE_INDEXBUILD_TABLESCAN 2 |
#define | PROGRESS_BTREE_PHASE_PERFORMSORT_1 3 |
#define | PROGRESS_BTREE_PHASE_PERFORMSORT_2 4 |
#define | PROGRESS_BTREE_PHASE_LEAF_LOAD 5 |
#define BT_READ BUFFER_LOCK_SHARE |
#define BT_WRITE BUFFER_LOCK_EXCLUSIVE |
#define BTCommuteStrategyNumber | ( | strat | ) | (BTMaxStrategyNumber + 1 - (strat)) |
#define BTGetDeduplicateItems | ( | relation | ) |
#define BTGetFillFactor | ( | relation | ) |
#define BTGetTargetPageFreeSpace | ( | relation | ) | (BLCKSZ * (100 - BTGetFillFactor(relation)) / 100) |
#define BTMaxItemSize | ( | page | ) |
#define BTMaxItemSizeNoHeapTid | ( | page | ) |
#define BTP_DELETED (1 << 2) /* page has been deleted from tree */ |
#define BTP_HALF_DEAD (1 << 4) /* empty, but still in tree */ |
#define BTP_HAS_FULLXID (1 << 8) /* contains BTDeletedPageData */ |
#define BTP_HAS_GARBAGE (1 << 6) /* page has LP_DEAD tuples (deprecated) */ |
#define BTP_INCOMPLETE_SPLIT (1 << 7) /* right sibling's downlink is missing */ |
#define BTP_LEAF (1 << 0) /* leaf page, i.e. not internal page */ |
#define BTP_SPLIT_END (1 << 5) /* rightmost page of split group */ |
#define BTPageGetMeta | ( | p | ) | ((BTMetaPageData *) PageGetContents(p)) |
#define BTPageGetOpaque | ( | page | ) | ((BTPageOpaque) PageGetSpecialPointer(page)) |
#define BTREE_MAGIC 0x053162 /* magic number in metapage */ |
#define BTREE_MIN_VERSION 2 /* minimum supported version */ |
#define BTREE_NOVAC_VERSION 3 /* version with all meta fields set */ |
#define BTreeTupleGetNAtts | ( | itup, | |
rel | |||
) |
#define BTScanPosInvalidate | ( | scanpos | ) |
#define BTScanPosIsPinned | ( | scanpos | ) |
#define BTScanPosIsValid | ( | scanpos | ) |
#define BTScanPosUnpin | ( | scanpos | ) |
#define BTScanPosUnpinIfPinned | ( | scanpos | ) |
#define INDEX_ALT_TID_MASK INDEX_AM_RESERVED_BIT |
#define MaxTIDsPerBTreePage |
#define P_FIRSTDATAKEY | ( | opaque | ) | (P_RIGHTMOST(opaque) ? P_HIKEY : P_FIRSTKEY) |
#define P_FIRSTKEY ((OffsetNumber) 2) |
#define P_HAS_FULLXID | ( | opaque | ) | (((opaque)->btpo_flags & BTP_HAS_FULLXID) != 0) |
#define P_HAS_GARBAGE | ( | opaque | ) | (((opaque)->btpo_flags & BTP_HAS_GARBAGE) != 0) |
#define P_HIKEY ((OffsetNumber) 1) |
#define P_IGNORE | ( | opaque | ) | (((opaque)->btpo_flags & (BTP_DELETED|BTP_HALF_DEAD)) != 0) |
#define P_INCOMPLETE_SPLIT | ( | opaque | ) | (((opaque)->btpo_flags & BTP_INCOMPLETE_SPLIT) != 0) |
#define P_ISDELETED | ( | opaque | ) | (((opaque)->btpo_flags & BTP_DELETED) != 0) |
#define P_ISHALFDEAD | ( | opaque | ) | (((opaque)->btpo_flags & BTP_HALF_DEAD) != 0) |
#define P_ISLEAF | ( | opaque | ) | (((opaque)->btpo_flags & BTP_LEAF) != 0) |
#define P_ISMETA | ( | opaque | ) | (((opaque)->btpo_flags & BTP_META) != 0) |
#define P_ISROOT | ( | opaque | ) | (((opaque)->btpo_flags & BTP_ROOT) != 0) |
#define P_LEFTMOST | ( | opaque | ) | ((opaque)->btpo_prev == P_NONE) |
#define P_RIGHTMOST | ( | opaque | ) | ((opaque)->btpo_next == P_NONE) |
#define SK_BT_DESC (INDOPTION_DESC << SK_BT_INDOPTION_SHIFT) |
#define SK_BT_INDOPTION_SHIFT 24 /* must clear the above bits */ |
#define SK_BT_NULLS_FIRST (INDOPTION_NULLS_FIRST << SK_BT_INDOPTION_SHIFT) |
#define SK_BT_REQBKWD 0x00020000 /* required to continue backward scan */ |
#define SK_BT_REQFWD 0x00010000 /* required to continue forward scan */ |
typedef struct BTArrayKeyInfo BTArrayKeyInfo |
typedef struct BTDedupInterval BTDedupInterval |
typedef BTDedupStateData* BTDedupState |
typedef struct BTDedupStateData BTDedupStateData |
typedef struct BTDeletedPageData BTDeletedPageData |
typedef BTInsertStateData* BTInsertState |
typedef struct BTInsertStateData BTInsertStateData |
typedef struct BTMetaPageData BTMetaPageData |
typedef BTPageOpaqueData* BTPageOpaque |
typedef struct BTPageOpaqueData BTPageOpaqueData |
typedef struct BTPendingFSM BTPendingFSM |
typedef struct BTReadPageState BTReadPageState |
typedef BTScanInsertData* BTScanInsert |
typedef struct BTScanInsertData BTScanInsertData |
typedef BTScanOpaqueData* BTScanOpaque |
typedef struct BTScanOpaqueData BTScanOpaqueData |
typedef BTScanPosData* BTScanPos |
typedef struct BTScanPosData BTScanPosData |
typedef struct BTScanPosItem BTScanPosItem |
typedef BTStackData* BTStack |
typedef struct BTStackData BTStackData |
typedef struct BTVacState BTVacState |
typedef BTVacuumPostingData* BTVacuumPosting |
typedef struct BTVacuumPostingData BTVacuumPostingData |
bool _bt_allequalimage | ( | Relation | rel, |
bool | debugmessage | ||
) |
Definition at line 3297 of file nbtutils.c.
References BTEQUALIMAGE_PROC, DatumGetBool(), DEBUG1, elog, get_opfamily_proc(), i, IndexRelationGetNumberOfAttributes, IndexRelationGetNumberOfKeyAttributes, ObjectIdGetDatum(), OidFunctionCall1Coll(), OidIsValid, RelationData::rd_indcollation, RelationData::rd_opcintype, RelationData::rd_opfamily, and RelationGetRelationName.
Referenced by _bt_leafbuild(), bt_index_check_internal(), and btbuildempty().
Definition at line 869 of file nbtpage.c.
References _bt_conditionallockbuf(), _bt_pageinit(), _bt_relbuf(), Assert, xl_btree_reuse_page::block, BMR_REL, BTPageGetDeleteXid(), BTPageIsRecyclable(), buf, BufferGetPage(), BufferGetPageSize(), DEBUG2, EB_LOCK_FIRST, elog, ExtendBufferedRel(), GetFreeIndexPage(), InvalidBlockNumber, xl_btree_reuse_page::isCatalogRel, xl_btree_reuse_page::locator, MAIN_FORKNUM, PageIsNew(), RelationData::rd_locator, ReadBuffer(), RelationIsAccessibleInLogicalDecoding, RelationNeedsWAL, RelationUsesLocalBuffers, ReleaseBuffer(), SizeOfBtreeReusePage, xl_btree_reuse_page::snapshotConflictHorizon, VALGRIND_MAKE_MEM_DEFINED, XLOG_BTREE_REUSE_PAGE, XLogBeginInsert(), XLogInsert(), XLogRegisterData(), and XLogStandbyInfoActive.
Referenced by _bt_getroot(), _bt_newlevel(), and _bt_split().
int _bt_binsrch_array_skey | ( | FmgrInfo * | orderproc, |
bool | cur_elem_trig, | ||
ScanDirection | dir, | ||
Datum | tupdatum, | ||
bool | tupnull, | ||
BTArrayKeyInfo * | array, | ||
ScanKey | cur, | ||
int32 * | set_elem_result | ||
) |
Definition at line 271 of file nbtutils.c.
References _bt_compare_array_skey(), Assert, BTEqualStrategyNumber, cur, BTArrayKeyInfo::cur_elem, BTArrayKeyInfo::elem_values, BTArrayKeyInfo::num_elems, ScanDirectionIsForward, ScanDirectionIsNoMovement, SK_BT_REQFWD, and SK_SEARCHARRAY.
Referenced by _bt_advance_array_keys(), and _bt_compare_array_scankey_args().
OffsetNumber _bt_binsrch_insert | ( | Relation | rel, |
BTInsertState | insertstate | ||
) |
Definition at line 474 of file nbtsearch.c.
References _bt_binsrch_posting(), _bt_compare(), Assert, BTInsertStateData::bounds_valid, BTPageGetOpaque, BTInsertStateData::buf, BufferGetBlockNumber(), BufferGetPage(), ereport, errcode(), errmsg_internal(), ERROR, InvalidOffsetNumber, ItemPointerGetBlockNumber(), ItemPointerGetOffsetNumber(), BTInsertStateData::itup_key, sort-test::key, BTInsertStateData::low, P_FIRSTDATAKEY, P_ISLEAF, PageGetMaxOffsetNumber(), BTInsertStateData::postingoff, RelationGetRelationName, BTInsertStateData::stricthigh, and unlikely.
Referenced by _bt_check_unique(), _bt_findinsertloc(), and bt_rootdescend().
Definition at line 307 of file nbtdedup.c.
References _bt_bottomupdel_finish_pending(), _bt_dedup_save_htid(), _bt_dedup_start_pending(), _bt_delitems_delete_check(), _bt_keep_natts_fast(), Assert, TM_IndexDeleteOp::bottomup, TM_IndexDeleteOp::bottomupfreespace, BTPageGetOpaque, buf, BufferGetBlockNumber(), BufferGetPage(), TM_IndexDeleteOp::deltids, TM_IndexDeleteOp::iblknum, IndexRelationGetNumberOfKeyAttributes, InvalidOffsetNumber, TM_IndexDeleteOp::irel, ItemIdIsDead, Max, MaxTIDsPerBTreePage, TM_IndexDeleteOp::ndeltids, OffsetNumberNext, P_FIRSTDATAKEY, PageGetExactFreeSpace(), PageGetItem(), PageGetItemId(), PageGetMaxOffsetNumber(), palloc(), pfree(), and TM_IndexDeleteOp::status.
Referenced by _bt_delete_or_dedup_one_page().
bool _bt_check_natts | ( | Relation | rel, |
bool | heapkeyspace, | ||
Page | page, | ||
OffsetNumber | offnum | ||
) |
Definition at line 3079 of file nbtutils.c.
References Assert, BT_PIVOT_HEAP_TID_ATTR, BTPageGetOpaque, BTreeTupleGetHeapTID(), BTreeTupleGetNAtts, BTreeTupleIsPivot(), BTreeTupleIsPosting(), FirstOffsetNumber, IndexRelationGetNumberOfAttributes, IndexRelationGetNumberOfKeyAttributes, ItemPointerGetOffsetNumber(), ItemPointerGetOffsetNumberNoCheck(), P_FIRSTDATAKEY, P_HIKEY, P_IGNORE, P_ISLEAF, P_RIGHTMOST, PageGetItem(), PageGetItemId(), PageGetMaxOffsetNumber(), and IndexTupleData::t_tid.
Referenced by _bt_compare(), and bt_target_page_check().
void _bt_check_third_page | ( | Relation | rel, |
Relation | heap, | ||
bool | needheaptidspace, | ||
Page | page, | ||
IndexTuple | newtup | ||
) |
Definition at line 3239 of file nbtutils.c.
References BTMaxItemSize, BTMaxItemSizeNoHeapTid, BTPageGetOpaque, BTREE_NOVAC_VERSION, BTREE_VERSION, BTreeTupleGetHeapTID(), elog, ereport, errcode(), errdetail(), errhint(), errmsg(), ERROR, errtableconstraint(), IndexTupleSize(), ItemPointerGetBlockNumber(), ItemPointerGetOffsetNumber(), MAXALIGN, P_ISLEAF, and RelationGetRelationName.
Referenced by _bt_buildadd(), and _bt_findinsertloc().
bool _bt_checkkeys | ( | IndexScanDesc | scan, |
BTReadPageState * | pstate, | ||
bool | arrayKeys, | ||
IndexTuple | tuple, | ||
int | tupnatts | ||
) |
Definition at line 1627 of file nbtutils.c.
References _bt_advance_array_keys(), _bt_check_compare(), _bt_checkkeys_look_ahead(), _bt_tuple_before_array_skeys(), Assert, BTEqualStrategyNumber, BTreeTupleGetNAtts, BTReadPageState::continuescan, BTScanOpaqueData::currPos, BTScanPosData::dir, BTReadPageState::finaltup, BTReadPageState::firstmatch, IndexScanDescData::indexRelation, BTScanOpaqueData::keyData, LOOK_AHEAD_REQUIRED_RECHECKS, BTScanOpaqueData::needPrimScan, BTScanOpaqueData::numArrayKeys, IndexScanDescData::opaque, BTScanOpaqueData::oppositeDirCheck, BTReadPageState::prechecked, BTReadPageState::rechecks, RelationGetDescr, res, BTScanOpaqueData::scanBehind, ScanKeyData::sk_strategy, and unlikely.
Referenced by _bt_readpage().
Definition at line 797 of file nbtpage.c.
References buf, BufferGetBlockNumber(), BufferGetPage(), ereport, errcode(), errhint(), errmsg(), ERROR, MAXALIGN, PageGetSpecialSize(), PageIsNew(), and RelationGetRelationName.
Referenced by _bt_getbuf(), _bt_relandgetbuf(), _bt_search_insert(), bt_recheck_sibling_links(), btvacuumpage(), and palloc_btree_page().
int32 _bt_compare | ( | Relation | rel, |
BTScanInsert | key, | ||
Page | page, | ||
OffsetNumber | offnum | ||
) |
Definition at line 688 of file nbtsearch.c.
References _bt_check_natts(), Assert, BTPageGetOpaque, BTreeTupleGetHeapTID(), BTreeTupleGetMaxHeapTID(), BTreeTupleGetNAtts, BTreeTupleIsPosting(), DatumGetInt32(), FunctionCall2Coll(), i, index_getattr(), IndexRelationGetNumberOfKeyAttributes, INVERT_COMPARE_RESULT, ItemPointerCompare(), sort-test::key, Min, P_FIRSTDATAKEY, P_ISLEAF, PageGetItem(), PageGetItemId(), RelationGetDescr, ScanKeyData::sk_argument, ScanKeyData::sk_attno, SK_BT_DESC, SK_BT_NULLS_FIRST, ScanKeyData::sk_collation, ScanKeyData::sk_flags, ScanKeyData::sk_func, and SK_ISNULL.
Referenced by _bt_binsrch(), _bt_binsrch_insert(), _bt_check_unique(), _bt_findinsertloc(), _bt_moveright(), _bt_search_insert(), bt_rootdescend(), bt_target_page_check(), invariant_g_offset(), invariant_l_nontarget_offset(), invariant_l_offset(), and invariant_leq_offset().
Definition at line 1093 of file nbtpage.c.
References buf, BufferGetPage(), ConditionalLockBuffer(), RelationUsesLocalBuffers, and VALGRIND_MAKE_MEM_DEFINED.
Referenced by _bt_allocbuf(), and _bt_search_insert().
Size _bt_dedup_finish_pending | ( | Page | newpage, |
BTDedupState | state | ||
) |
Definition at line 555 of file nbtdedup.c.
References _bt_form_posting(), Assert, BTMaxItemSize, elog, ERROR, IndexTupleSize(), InvalidOffsetNumber, MAXALIGN, OffsetNumberNext, PageAddItem, PageGetMaxOffsetNumber(), and pfree().
Referenced by _bt_dedup_pass(), and btree_xlog_dedup().
void _bt_dedup_pass | ( | Relation | rel, |
Buffer | buf, | ||
IndexTuple | newitem, | ||
Size | newitemsz, | ||
bool | bottomupdedup | ||
) |
Definition at line 58 of file nbtdedup.c.
References _bt_dedup_finish_pending(), _bt_dedup_save_htid(), _bt_dedup_start_pending(), _bt_do_singleval(), _bt_keep_natts_fast(), _bt_singleval_fillfactor(), Assert, BTMaxItemSize, BTPageGetOpaque, BTPageOpaqueData::btpo_flags, buf, BufferGetPage(), elog, END_CRIT_SECTION, ERROR, INDEX_SIZE_MASK, IndexRelationGetNumberOfKeyAttributes, InvalidOffsetNumber, ItemIdGetLength, ItemIdIsDead, MarkBufferDirty(), Min, xl_btree_dedup::nintervals, OffsetNumberNext, P_FIRSTDATAKEY, P_HAS_GARBAGE, P_HIKEY, P_RIGHTMOST, PageAddItem, PageGetExactFreeSpace(), PageGetItem(), PageGetItemId(), PageGetLSN(), PageGetMaxOffsetNumber(), PageGetTempPageCopySpecial(), PageRestoreTempPage(), PageSetLSN(), palloc(), pfree(), PG_USED_FOR_ASSERTS_ONLY, REGBUF_STANDARD, RelationNeedsWAL, SizeOfBtreeDedup, START_CRIT_SECTION, XLOG_BTREE_DEDUP, XLogBeginInsert(), XLogInsert(), XLogRegisterBufData(), XLogRegisterBuffer(), and XLogRegisterData().
Referenced by _bt_delete_or_dedup_one_page().
bool _bt_dedup_save_htid | ( | BTDedupState | state, |
IndexTuple | itup | ||
) |
Definition at line 484 of file nbtdedup.c.
References Assert, BTreeTupleGetNPosting(), BTreeTupleGetPosting(), BTreeTupleIsPivot(), BTreeTupleIsPosting(), IndexTupleSize(), MAXALIGN, and IndexTupleData::t_tid.
Referenced by _bt_bottomupdel_pass(), _bt_dedup_pass(), _bt_load(), and btree_xlog_dedup().
void _bt_dedup_start_pending | ( | BTDedupState | state, |
IndexTuple | base, | ||
OffsetNumber | baseoff | ||
) |
Definition at line 433 of file nbtdedup.c.
References Assert, BTreeTupleGetNPosting(), BTreeTupleGetPosting(), BTreeTupleGetPostingOffset(), BTreeTupleIsPivot(), BTreeTupleIsPosting(), IndexTupleSize(), MAXALIGN, and IndexTupleData::t_tid.
Referenced by _bt_bottomupdel_pass(), _bt_dedup_pass(), _bt_load(), and btree_xlog_dedup().
void _bt_delitems_delete_check | ( | Relation | rel, |
Buffer | buf, | ||
Relation | heapRel, | ||
TM_IndexDeleteOp * | delstate | ||
) |
Definition at line 1513 of file nbtpage.c.
References _bt_delitems_cmp(), _bt_delitems_delete(), Assert, TM_IndexDeleteOp::bottomup, BTreeTupleGetHeapTID(), BTreeTupleGetMaxHeapTID(), BTreeTupleGetNPosting(), BTreeTupleGetPostingN(), BTreeTupleIsPosting(), buf, BufferGetPage(), BTVacuumPostingData::deletetids, TM_IndexDeleteOp::deltids, i, TM_IndexDelete::id, TM_IndexStatus::idxoffnum, InvalidOffsetNumber, InvalidTransactionId, ItemPointerCompare(), ItemPointerEquals(), BTVacuumPostingData::itup, TM_IndexStatus::knowndeletable, MaxIndexTuplesPerPage, BTVacuumPostingData::ndeletedtids, TM_IndexDeleteOp::ndeltids, OffsetNumberIsValid, PageGetItem(), PageGetItemId(), palloc(), pfree(), qsort, RelationIsAccessibleInLogicalDecoding, TM_IndexDeleteOp::status, IndexTupleData::t_tid, table_index_delete_tuples(), TM_IndexDelete::tid, BTVacuumPostingData::updatedoffset, and XLogStandbyInfoActive.
Referenced by _bt_bottomupdel_pass(), and _bt_simpledel_pass().
void _bt_delitems_vacuum | ( | Relation | rel, |
Buffer | buf, | ||
OffsetNumber * | deletable, | ||
int | ndeletable, | ||
BTVacuumPosting * | updatable, | ||
int | nupdatable | ||
) |
Definition at line 1154 of file nbtpage.c.
References _bt_delitems_update(), Assert, BTPageGetOpaque, BTPageOpaqueData::btpo_cycleid, BTPageOpaqueData::btpo_flags, buf, BufferGetBlockNumber(), BufferGetPage(), elog, END_CRIT_SECTION, i, IndexTupleSize(), BTVacuumPostingData::itup, MarkBufferDirty(), MAXALIGN, MaxIndexTuplesPerPage, xl_btree_vacuum::ndeleted, xl_btree_vacuum::nupdated, PageIndexMultiDelete(), PageIndexTupleOverwrite(), PageSetLSN(), PANIC, pfree(), REGBUF_STANDARD, RelationGetRelationName, RelationNeedsWAL, SizeOfBtreeVacuum, START_CRIT_SECTION, XLOG_BTREE_VACUUM, XLogBeginInsert(), XLogInsert(), XLogRegisterBufData(), XLogRegisterBuffer(), and XLogRegisterData().
Referenced by btvacuumpage().
bool _bt_doinsert | ( | Relation | rel, |
IndexTuple | itup, | ||
IndexUniqueCheck | checkUnique, | ||
bool | indexUnchanged, | ||
Relation | heapRel | ||
) |
Definition at line 102 of file nbtinsert.c.
References _bt_check_unique(), _bt_findinsertloc(), _bt_freestack(), _bt_insertonpg(), _bt_mkscankey(), _bt_relbuf(), _bt_search_insert(), BTScanInsertData::anynullkeys, Assert, BTInsertStateData::bounds_valid, BTInsertStateData::buf, BufferGetBlockNumber(), CheckForSerializableConflictIn(), BTScanInsertData::heapkeyspace, IndexTupleSize(), InvalidBuffer, BTInsertStateData::itemsz, BTInsertStateData::itup, BTInsertStateData::itup_key, MAXALIGN, pfree(), BTInsertStateData::postingoff, BTScanInsertData::scantid, SpeculativeInsertionWait(), IndexTupleData::t_tid, TransactionIdIsValid, UNIQUE_CHECK_EXISTING, UNIQUE_CHECK_NO, unlikely, XactLockTableWait(), and XLTW_InsertIndex.
Referenced by btinsert().
void _bt_end_vacuum | ( | Relation | rel | ) |
Definition at line 2641 of file nbtutils.c.
References btvacinfo, LockRelId::dbId, i, LockInfoData::lockRelId, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), BTVacInfo::num_vacuums, RelationData::rd_lockInfo, BTOneVacInfo::relid, LockRelId::relId, and BTVacInfo::vacuums.
Referenced by _bt_end_vacuum_callback(), and btbulkdelete().
void _bt_end_vacuum_callback | ( | int | code, |
Datum | arg | ||
) |
Definition at line 2669 of file nbtutils.c.
References _bt_end_vacuum(), arg, and DatumGetPointer().
Referenced by btbulkdelete().
OffsetNumber _bt_findsplitloc | ( | Relation | rel, |
Page | origpage, | ||
OffsetNumber | newitemoff, | ||
Size | newitemsz, | ||
IndexTuple | newitem, | ||
bool * | newitemonleft | ||
) |
Definition at line 129 of file nbtsplitloc.c.
References _bt_afternewitemoff(), _bt_bestsplitloc(), _bt_defaultinterval(), _bt_deltasortsplits(), _bt_recsplitloc(), _bt_strategy(), Assert, BTGetFillFactor, BTPageGetOpaque, BTREE_NONLEAF_FILLFACTOR, BTREE_SINGLEVAL_FILLFACTOR, BTreeTupleIsPosting(), elog, ERROR, SplitPoint::firstrightoff, i, IndexRelationGetNumberOfKeyAttributes, ItemIdGetLength, MAXALIGN, SplitPoint::newitemonleft, OffsetNumberNext, P_FIRSTDATAKEY, P_HIKEY, P_ISLEAF, P_RIGHTMOST, PageGetExactFreeSpace(), PageGetItemId(), PageGetMaxOffsetNumber(), PageGetPageSize(), palloc(), pfree(), RelationGetRelationName, SizeOfPageHeaderData, SPLIT_DEFAULT, SPLIT_MANY_DUPLICATES, and SPLIT_SINGLE_VALUE.
Referenced by _bt_split().
Definition at line 2241 of file nbtinsert.c.
References _bt_getbuf(), _bt_insert_parent(), _bt_relbuf(), Assert, BT_WRITE, BTMetaPageData::btm_root, BTPageGetMeta, BTPageGetOpaque, BTPageOpaqueData::btpo_next, BTREE_METAPAGE, BufferGetBlockNumber(), BufferGetPage(), DEBUG1, elog, P_INCOMPLETE_SPLIT, P_LEFTMOST, and P_RIGHTMOST.
Referenced by _bt_getstackbuf(), _bt_moveright(), and _bt_stepright().
bool _bt_first | ( | IndexScanDesc | scan, |
ScanDirection | dir | ||
) |
Definition at line 882 of file nbtsearch.c.
References _bt_binsrch(), _bt_endpoint(), _bt_freestack(), _bt_metaversion(), _bt_parallel_done(), _bt_parallel_seize(), _bt_preprocess_keys(), _bt_readfirstpage(), _bt_readnextpage(), _bt_returnitem(), _bt_search(), _bt_start_array_keys(), Assert, BT_READ, BTEqualStrategyNumber, BTGreaterEqualStrategyNumber, BTGreaterStrategyNumber, BTLessEqualStrategyNumber, BTLessStrategyNumber, BTORDER_PROC, BTScanPosIsValid, BTScanPosData::buf, BufferIsValid(), cur, BTScanOpaqueData::currPos, DatumGetPointer(), elog, ERROR, get_opfamily_proc(), i, index_getprocinfo(), INDEX_MAX_KEYS, IndexScanDescData::indexRelation, InvalidBlockNumber, InvalidOid, InvalidStrategy, IsolationIsSerializable, BTScanOpaqueData::keyData, BTScanOpaqueData::needPrimScan, BTScanOpaqueData::numArrayKeys, BTScanOpaqueData::numberOfKeys, IndexScanDescData::opaque, P_NONE, IndexScanDescData::parallel_scan, pgstat_count_index_scan, PredicateLockRelation(), BTScanOpaqueData::qual_ok, RelationData::rd_opcintype, RelationData::rd_opfamily, RegProcedureIsValid, RelationGetRelationName, ScanDirectionIsBackward, ScanDirectionIsForward, ScanKeyEntryInitialize(), ScanKeyEntryInitializeWithInfo(), ScanKeyData::sk_attno, SK_BT_DESC, SK_BT_NULLS_FIRST, ScanKeyData::sk_flags, SK_ISNULL, SK_ROW_END, SK_ROW_HEADER, SK_ROW_MEMBER, SK_SEARCHNOTNULL, ScanKeyData::sk_strategy, and IndexScanDescData::xs_snapshot.
Referenced by btgetbitmap(), and btgettuple().
IndexTuple _bt_form_posting | ( | IndexTuple | base, |
ItemPointer | htids, | ||
int | nhtids | ||
) |
Definition at line 864 of file nbtdedup.c.
References Assert, BTreeTupleGetPosting(), BTreeTupleGetPostingOffset(), BTreeTupleIsPivot(), BTreeTupleIsPosting(), BTreeTupleSetPosting(), INDEX_SIZE_MASK, IndexTupleSize(), ItemPointerCopy(), ItemPointerIsValid(), MAXALIGN, palloc0(), PG_UINT16_MAX, IndexTupleData::t_info, and IndexTupleData::t_tid.
Referenced by _bt_dedup_finish_pending(), _bt_sort_dedup_finish_pending(), and bt_posting_plain_tuple().
void _bt_freestack | ( | BTStack | stack | ) |
Definition at line 172 of file nbtutils.c.
References BTStackData::bts_parent, and pfree().
Referenced by _bt_doinsert(), _bt_first(), and bt_rootdescend().
Definition at line 2451 of file nbtsearch.c.
References _bt_getroot(), _bt_gettrueroot(), _bt_relandgetbuf(), BT_READ, BTPageGetOpaque, BTPageOpaqueData::btpo_level, BTPageOpaqueData::btpo_next, BTreeTupleGetDownLink(), buf, BufferGetPage(), BufferIsValid(), elog, ereport, errcode(), errmsg_internal(), ERROR, InvalidBuffer, P_FIRSTDATAKEY, P_IGNORE, P_NONE, P_RIGHTMOST, PageGetItem(), PageGetItemId(), PageGetMaxOffsetNumber(), and RelationGetRelationName.
Referenced by _bt_endpoint(), and _bt_insert_parent().
Buffer _bt_getbuf | ( | Relation | rel, |
BlockNumber | blkno, | ||
int | access | ||
) |
Definition at line 845 of file nbtpage.c.
References _bt_checkpage(), _bt_lockbuf(), Assert, BlockNumberIsValid(), buf, and ReadBuffer().
Referenced by _bt_finish_split(), _bt_getroot(), _bt_getrootheight(), _bt_getstackbuf(), _bt_gettrueroot(), _bt_insertonpg(), _bt_killitems(), _bt_leftsib_splitflag(), _bt_lock_and_validate_left(), _bt_metaversion(), _bt_moveright(), _bt_newlevel(), _bt_pagedel(), _bt_readnextpage(), _bt_rightsib_halfdeadflag(), _bt_set_cleanup_info(), _bt_split(), _bt_unlink_halfdead_page(), and _bt_vacuum_needs_cleanup().
Definition at line 344 of file nbtpage.c.
References _bt_allocbuf(), _bt_getbuf(), _bt_getmeta(), _bt_getroot(), _bt_lockbuf(), _bt_relandgetbuf(), _bt_relbuf(), _bt_unlockbuf(), _bt_upgrademetapage(), xl_btree_metadata::allequalimage, Assert, BT_READ, BT_WRITE, BTMetaPageData::btm_allequalimage, BTMetaPageData::btm_fastlevel, BTMetaPageData::btm_fastroot, BTMetaPageData::btm_last_cleanup_num_delpages, BTMetaPageData::btm_last_cleanup_num_heap_tuples, BTMetaPageData::btm_level, BTMetaPageData::btm_magic, BTMetaPageData::btm_root, BTMetaPageData::btm_version, BTP_LEAF, BTP_ROOT, BTPageGetOpaque, BTPageOpaqueData::btpo_cycleid, BTPageOpaqueData::btpo_flags, BTPageOpaqueData::btpo_level, BTPageOpaqueData::btpo_next, BTPageOpaqueData::btpo_prev, BTREE_MAGIC, BTREE_METAPAGE, BTREE_MIN_VERSION, BTREE_NOVAC_VERSION, BTREE_VERSION, BufferGetBlockNumber(), BufferGetPage(), elog, END_CRIT_SECTION, ERROR, xl_btree_metadata::fastlevel, xl_btree_metadata::fastroot, InvalidBuffer, xl_btree_metadata::last_cleanup_num_delpages, xl_btree_metadata::level, xl_btree_newroot::level, MarkBufferDirty(), MemoryContextAlloc(), P_IGNORE, P_LEFTMOST, P_NONE, P_RIGHTMOST, PageSetLSN(), pfree(), RelationData::rd_amcache, RelationData::rd_indexcxt, REGBUF_STANDARD, REGBUF_WILL_INIT, RelationGetRelationName, RelationNeedsWAL, xl_btree_metadata::root, xl_btree_newroot::rootblk, SizeOfBtreeNewroot, START_CRIT_SECTION, xl_btree_metadata::version, XLOG_BTREE_NEWROOT, XLogBeginInsert(), XLogInsert(), XLogRegisterBufData(), XLogRegisterBuffer(), and XLogRegisterData().
Referenced by _bt_get_endpoint(), _bt_getroot(), and _bt_search().
int _bt_getrootheight | ( | Relation | rel | ) |
Definition at line 675 of file nbtpage.c.
References _bt_getbuf(), _bt_getmeta(), _bt_relbuf(), Assert, BT_READ, BTMetaPageData::btm_allequalimage, BTMetaPageData::btm_fastlevel, BTMetaPageData::btm_fastroot, BTMetaPageData::btm_magic, BTMetaPageData::btm_root, BTMetaPageData::btm_version, BTREE_MAGIC, BTREE_METAPAGE, BTREE_MIN_VERSION, BTREE_NOVAC_VERSION, BTREE_VERSION, MemoryContextAlloc(), P_NONE, RelationData::rd_amcache, and RelationData::rd_indexcxt.
Referenced by _bt_insertonpg(), and btgettreeheight().
Buffer _bt_getstackbuf | ( | Relation | rel, |
Relation | heaprel, | ||
BTStack | stack, | ||
BlockNumber | child | ||
) |
Definition at line 2319 of file nbtinsert.c.
References _bt_finish_split(), _bt_getbuf(), _bt_relbuf(), Assert, BT_WRITE, BTPageGetOpaque, BTPageOpaqueData::btpo_next, BTreeTupleGetDownLink(), BTStackData::bts_blkno, BTStackData::bts_offset, BTStackData::bts_parent, buf, BufferGetPage(), InvalidBuffer, InvalidOffsetNumber, OffsetNumberNext, OffsetNumberPrev, P_FIRSTDATAKEY, P_IGNORE, P_INCOMPLETE_SPLIT, P_RIGHTMOST, PageGetItem(), PageGetItemId(), PageGetMaxOffsetNumber(), and start.
Referenced by _bt_insert_parent(), and _bt_lock_subtree_parent().
Definition at line 580 of file nbtpage.c.
References _bt_getbuf(), _bt_relandgetbuf(), _bt_relbuf(), BT_READ, BTMetaPageData::btm_level, BTMetaPageData::btm_magic, BTMetaPageData::btm_root, BTMetaPageData::btm_version, BTPageGetMeta, BTPageGetOpaque, BTPageOpaqueData::btpo_level, BTPageOpaqueData::btpo_next, BTREE_MAGIC, BTREE_METAPAGE, BTREE_MIN_VERSION, BTREE_VERSION, BufferGetPage(), elog, ereport, errcode(), errmsg(), ERROR, InvalidBuffer, P_IGNORE, P_ISMETA, P_NONE, P_RIGHTMOST, pfree(), RelationData::rd_amcache, and RelationGetRelationName.
Referenced by _bt_get_endpoint().
void _bt_initmetapage | ( | Page | page, |
BlockNumber | rootbknum, | ||
uint32 | level, | ||
bool | allequalimage | ||
) |
Definition at line 67 of file nbtpage.c.
References _bt_pageinit(), BTMetaPageData::btm_allequalimage, BTMetaPageData::btm_fastlevel, BTMetaPageData::btm_fastroot, BTMetaPageData::btm_last_cleanup_num_delpages, BTMetaPageData::btm_last_cleanup_num_heap_tuples, BTMetaPageData::btm_level, BTMetaPageData::btm_magic, BTMetaPageData::btm_root, BTMetaPageData::btm_version, BTP_META, BTPageGetMeta, BTPageGetOpaque, BTPageOpaqueData::btpo_flags, BTREE_MAGIC, and BTREE_VERSION.
Referenced by _bt_uppershutdown(), and btbuildempty().
int _bt_keep_natts_fast | ( | Relation | rel, |
IndexTuple | lastleft, | ||
IndexTuple | firstright | ||
) |
Definition at line 3032 of file nbtutils.c.
References CompactAttribute::attbyval, CompactAttribute::attlen, attnum, datum_image_eq(), index_getattr(), IndexRelationGetNumberOfKeyAttributes, RelationGetDescr, and TupleDescCompactAttr().
Referenced by _bt_afternewitemoff(), _bt_bottomupdel_pass(), _bt_dedup_pass(), _bt_do_singleval(), _bt_keep_natts(), _bt_load(), _bt_split_penalty(), and _bt_strategy().
void _bt_killitems | ( | IndexScanDesc | scan | ) |
Definition at line 2333 of file nbtutils.c.
References _bt_getbuf(), _bt_lockbuf(), _bt_relbuf(), _bt_unlockbuf(), Assert, BT_READ, BTP_HAS_GARBAGE, BTPageGetOpaque, BTreeTupleGetNPosting(), BTreeTupleGetPostingN(), BTreeTupleIsPosting(), BTScanPosIsPinned, BTScanPosIsValid, buf, BTScanPosData::buf, BufferGetLSNAtomic(), BufferGetPage(), BTScanPosData::currPage, BTScanOpaqueData::currPos, BTScanPosData::firstItem, BTScanPosItem::heapTid, i, BTScanPosItem::indexOffset, IndexScanDescData::indexRelation, ItemIdIsDead, ItemIdMarkDead, ItemPointerEquals(), BTScanPosData::items, j, BTScanOpaqueData::killedItems, BTScanPosData::lsn, MarkBufferDirtyHint(), BTScanOpaqueData::numKilled, OffsetNumberNext, IndexScanDescData::opaque, P_FIRSTDATAKEY, PageGetItem(), PageGetItemId(), PageGetMaxOffsetNumber(), PG_USED_FOR_ASSERTS_ONLY, and IndexTupleData::t_tid.
Referenced by _bt_steppage(), btendscan(), btrescan(), and btrestrpos().
Definition at line 1039 of file nbtpage.c.
References buf