PostgreSQL Source Code
git master
|
#include "postgres.h"
#include "access/amapi.h"
#include "access/relation.h"
#include "access/reloptions.h"
#include "access/relscan.h"
#include "access/tableam.h"
#include "catalog/index.h"
#include "catalog/pg_type.h"
#include "nodes/execnodes.h"
#include "pgstat.h"
#include "storage/lmgr.h"
#include "storage/predicate.h"
#include "utils/ruleutils.h"
#include "utils/snapmgr.h"
#include "utils/syscache.h"
Go to the source code of this file.
Macros | |
#define | RELATION_CHECKS |
#define | SCAN_CHECKS |
#define | CHECK_REL_PROCEDURE(pname) |
#define | CHECK_SCAN_PROCEDURE(pname) |
#define CHECK_REL_PROCEDURE | ( | pname | ) |
#define CHECK_SCAN_PROCEDURE | ( | pname | ) |
#define RELATION_CHECKS |
#define SCAN_CHECKS |
IndexScanDesc index_beginscan | ( | Relation | heapRelation, |
Relation | indexRelation, | ||
Snapshot | snapshot, | ||
int | nkeys, | ||
int | norderbys | ||
) |
Definition at line 256 of file indexam.c.
References Assert, IndexScanDescData::heapRelation, index_beginscan_internal(), InvalidSnapshot, table_index_fetch_begin(), IndexScanDescData::xs_heapfetch, and IndexScanDescData::xs_snapshot.
Referenced by check_exclusion_or_unique_constraint(), get_actual_variable_endpoint(), heapam_relation_copy_for_cluster(), IndexNext(), IndexNextWithReorder(), IndexOnlyNext(), RelationFindReplTupleByIndex(), systable_beginscan(), and systable_beginscan_ordered().
IndexScanDesc index_beginscan_bitmap | ( | Relation | indexRelation, |
Snapshot | snapshot, | ||
int | nkeys | ||
) |
Definition at line 287 of file indexam.c.
References Assert, index_beginscan_internal(), InvalidSnapshot, and IndexScanDescData::xs_snapshot.
Referenced by ExecInitBitmapIndexScan().
|
static |
Definition at line 310 of file indexam.c.
References IndexAmRoutine::ambeginscan, IndexAmRoutine::ampredlocks, CHECK_REL_PROCEDURE, IndexScanDescData::parallel_scan, PredicateLockRelation(), RelationData::rd_indam, RELATION_CHECKS, RelationIncrementReferenceCount(), and IndexScanDescData::xs_temp_snap.
Referenced by index_beginscan(), index_beginscan_bitmap(), and index_beginscan_parallel().
IndexScanDesc index_beginscan_parallel | ( | Relation | heaprel, |
Relation | indexrel, | ||
int | nkeys, | ||
int | norderbys, | ||
ParallelIndexScanDesc | pscan | ||
) |
Definition at line 541 of file indexam.c.
References Assert, IndexScanDescData::heapRelation, index_beginscan_internal(), ParallelIndexScanDescData::ps_indexlocator, ParallelIndexScanDescData::ps_locator, ParallelIndexScanDescData::ps_snapshot_data, RelationData::rd_locator, RegisterSnapshot(), RelFileLocatorEquals, RestoreSnapshot(), table_index_fetch_begin(), IndexScanDescData::xs_heapfetch, and IndexScanDescData::xs_snapshot.
Referenced by ExecIndexOnlyScanInitializeDSM(), ExecIndexOnlyScanInitializeWorker(), ExecIndexScanInitializeDSM(), and ExecIndexScanInitializeWorker().
IndexBulkDeleteResult* index_bulk_delete | ( | IndexVacuumInfo * | info, |
IndexBulkDeleteResult * | istat, | ||
IndexBulkDeleteCallback | callback, | ||
void * | callback_state | ||
) |
Definition at line 750 of file indexam.c.
References IndexAmRoutine::ambulkdelete, callback(), CHECK_REL_PROCEDURE, IndexVacuumInfo::index, RelationData::rd_indam, and RELATION_CHECKS.
Referenced by vac_bulkdel_one_index(), and validate_index().
bool index_can_return | ( | Relation | indexRelation, |
int | attno | ||
) |
Definition at line 790 of file indexam.c.
References IndexAmRoutine::amcanreturn, RelationData::rd_indam, and RELATION_CHECKS.
Referenced by get_relation_info(), and indexam_property().
Definition at line 177 of file indexam.c.
References Assert, LockInfoData::lockRelId, MAX_LOCKMODES, NoLock, RelationData::rd_lockInfo, RelationClose(), and UnlockRelationId().
Referenced by _brin_parallel_build_main(), _bt_parallel_build_main(), ATExecAddIndex(), ATExecAddIndexConstraint(), ATExecReplicaIdentity(), AttachPartitionEnsureIndexes(), brin_page_items(), brincostestimate(), bt_index_check_internal(), build_index_value_desc(), build_indices(), BuildEventTriggerCache(), check_index_is_clusterable(), CheckIndexCompatible(), close_lo_relation(), copy_table_data(), DefineIndex(), DefineRelation(), DetachPartitionFinalize(), enum_endpoint(), enum_range_internal(), ExecCloseIndices(), ExecEndBitmapIndexScan(), ExecEndIndexOnlyScan(), ExecEndIndexScan(), expandTableLikeClause(), FindReplTupleInLocalRel(), FindUsableIndexForReplicaIdentityFull(), get_actual_variable_range(), get_relation_info(), gin_clean_pending_list(), gincostestimate(), gist_page_items(), hash_bitmap_info(), index_concurrently_build(), index_concurrently_create_copy(), index_concurrently_set_dead(), index_create(), index_drop(), indexam_property(), infer_arbiter_indexes(), InitCatCachePhase2(), lookup_ts_config_cache(), pg_nextoid(), pgstathashindex(), plan_create_index_workers(), refresh_by_match_merge(), RefreshMatViewByOid(), reindex_index(), ReindexRelationConcurrently(), RelationFindReplTupleByIndex(), RelationGetIndexAttrBitmap(), RelationTruncateIndexes(), SetIndexStorageProperties(), systable_endscan(), toast_close_indexes(), TryReuseIndex(), vac_close_indexes(), vac_open_indexes(), and validate_index().
void index_endscan | ( | IndexScanDesc | scan | ) |
Definition at line 378 of file indexam.c.
References IndexAmRoutine::amendscan, CHECK_SCAN_PROCEDURE, IndexScanDescData::indexRelation, IndexScanEnd(), RelationData::rd_indam, RelationDecrementReferenceCount(), SCAN_CHECKS, table_index_fetch_end(), UnregisterSnapshot(), IndexScanDescData::xs_heapfetch, IndexScanDescData::xs_snapshot, and IndexScanDescData::xs_temp_snap.
Referenced by check_exclusion_or_unique_constraint(), ExecEndBitmapIndexScan(), ExecEndIndexOnlyScan(), ExecEndIndexScan(), get_actual_variable_endpoint(), heapam_relation_copy_for_cluster(), RelationFindReplTupleByIndex(), systable_endscan(), and systable_endscan_ordered().
bool index_fetch_heap | ( | IndexScanDesc | scan, |
TupleTableSlot * | slot | ||
) |
Definition at line 634 of file indexam.c.
References IndexScanDescData::indexRelation, IndexScanDescData::kill_prior_tuple, pgstat_count_heap_fetch, table_index_fetch_tuple(), IndexScanDescData::xactStartedInRecovery, IndexScanDescData::xs_heap_continue, IndexScanDescData::xs_heapfetch, IndexScanDescData::xs_heaptid, and IndexScanDescData::xs_snapshot.
Referenced by get_actual_variable_endpoint(), index_getnext_slot(), and IndexOnlyNext().
int64 index_getbitmap | ( | IndexScanDesc | scan, |
TIDBitmap * | bitmap | ||
) |
Definition at line 720 of file indexam.c.
References IndexAmRoutine::amgetbitmap, CHECK_SCAN_PROCEDURE, IndexScanDescData::indexRelation, IndexScanDescData::kill_prior_tuple, pgstat_count_index_tuples, RelationData::rd_indam, and SCAN_CHECKS.
Referenced by MultiExecBitmapIndexScan().
bool index_getnext_slot | ( | IndexScanDesc | scan, |
ScanDirection | direction, | ||
TupleTableSlot * | slot | ||
) |
Definition at line 675 of file indexam.c.
References Assert, index_fetch_heap(), index_getnext_tid(), ItemPointerEquals(), ItemPointerIsValid(), IndexScanDescData::xs_heap_continue, and IndexScanDescData::xs_heaptid.
Referenced by check_exclusion_or_unique_constraint(), heapam_relation_copy_for_cluster(), IndexNext(), IndexNextWithReorder(), RelationFindReplTupleByIndex(), systable_getnext(), and systable_getnext_ordered().
ItemPointer index_getnext_tid | ( | IndexScanDesc | scan, |
ScanDirection | direction | ||
) |
Definition at line 576 of file indexam.c.
References IndexAmRoutine::amgettuple, Assert, CHECK_SCAN_PROCEDURE, IndexScanDescData::indexRelation, ItemPointerIsValid(), IndexScanDescData::kill_prior_tuple, pgstat_count_index_tuples, RelationData::rd_indam, RecentXmin, SCAN_CHECKS, table_index_fetch_reset(), TransactionIdIsValid, IndexScanDescData::xs_heap_continue, IndexScanDescData::xs_heapfetch, and IndexScanDescData::xs_heaptid.
Referenced by get_actual_variable_endpoint(), index_getnext_slot(), and IndexOnlyNext().
RegProcedure index_getprocid | ( | Relation | irel, |
AttrNumber | attnum, | ||
uint16 | procnum | ||
) |
Definition at line 828 of file indexam.c.
References IndexAmRoutine::amsupport, Assert, attnum, RelationData::rd_indam, and RelationData::rd_support.
Referenced by _hash_init(), bloom_get_procinfo(), gistbuild(), gistcanreturn(), inclusion_get_procinfo(), index_opclass_options(), initGinState(), initGISTstate(), minmax_multi_get_procinfo(), spgdoinsert(), and spgGetCache().
FmgrInfo* index_getprocinfo | ( | Relation | irel, |
AttrNumber | attnum, | ||
uint16 | procnum | ||
) |
Definition at line 862 of file indexam.c.
References IndexAmRoutine::amoptsprocnum, IndexAmRoutine::amsupport, Assert, attnum, elog, ERROR, fmgr_info_cxt(), FmgrInfo::fn_oid, InvalidOid, MemoryContextSwitchTo(), RelationData::rd_indam, RelationData::rd_indexcxt, RelationData::rd_support, RelationData::rd_supportinfo, RegProcedureIsValid, RelationGetIndexAttOptions(), RelationGetRelationName, and set_fn_opclass_options().
Referenced by _bt_first(), _bt_mkscankey(), _bt_setup_array_cmp(), _hash_datum2hashkey(), add_values_to_range(), bloom_get_procinfo(), brin_build_desc(), bringetbitmap(), doPickSplit(), inclusion_get_procinfo(), index_opclass_options(), initBloomState(), initGinState(), initGISTstate(), minmax_multi_get_procinfo(), spgbeginscan(), spgdoinsert(), spgGetCache(), and union_tuples().
bool index_insert | ( | Relation | indexRelation, |
Datum * | values, | ||
bool * | isnull, | ||
ItemPointer | heap_t_ctid, | ||
Relation | heapRelation, | ||
IndexUniqueCheck | checkUnique, | ||
bool | indexUnchanged, | ||
IndexInfo * | indexInfo | ||
) |
Definition at line 213 of file indexam.c.
References IndexAmRoutine::aminsert, IndexAmRoutine::ampredlocks, CHECK_REL_PROCEDURE, CheckForSerializableConflictIn(), InvalidBlockNumber, RelationData::rd_indam, RELATION_CHECKS, and values.
Referenced by CatalogIndexInsert(), ExecInsertIndexTuples(), heapam_index_validate_scan(), and toast_save_datum().
Definition at line 241 of file indexam.c.
References IndexAmRoutine::aminsertcleanup, RelationData::rd_indam, and RELATION_CHECKS.
Referenced by ExecCloseIndices(), and validate_index().
void index_markpos | ( | IndexScanDesc | scan | ) |
Definition at line 408 of file indexam.c.
References IndexAmRoutine::ammarkpos, CHECK_SCAN_PROCEDURE, IndexScanDescData::indexRelation, RelationData::rd_indam, and SCAN_CHECKS.
Referenced by ExecIndexMarkPos(), and ExecIndexOnlyMarkPos().
bytea* index_opclass_options | ( | Relation | indrel, |
AttrNumber | attnum, | ||
Datum | attoptions, | ||
bool | validate | ||
) |
Definition at line 998 of file indexam.c.
References IndexAmRoutine::amoptsprocnum, attnum, build_local_reloptions(), DatumGetPointer(), ereport, errcode(), errmsg(), ERROR, FunctionCall1, generate_opclass_name(), index_getprocid(), index_getprocinfo(), init_local_reloptions(), InvalidOid, OidIsValid, PointerGetDatum(), RelationData::rd_indam, RelationData::rd_indextuple, SysCacheGetAttrNotNull(), and oidvector::values.
Referenced by index_create(), and RelationGetIndexAttOptions().
Definition at line 133 of file indexam.c.
References relation_open(), and validate_relation_kind().
Referenced by _brin_parallel_build_main(), _bt_parallel_build_main(), ATExecAddIndex(), ATExecAddIndexConstraint(), ATExecReplicaIdentity(), AttachPartitionEnsureIndexes(), brin_desummarize_range(), brin_page_items(), brin_summarize_range(), brincostestimate(), bt_index_check_internal(), build_index_value_desc(), build_indices(), BuildEventTriggerCache(), check_index_is_clusterable(), CheckIndexCompatible(), copy_table_data(), DefineIndex(), DefineRelation(), DetachPartitionFinalize(), enum_endpoint(), enum_range_internal(), ExecInitBitmapIndexScan(), ExecInitIndexOnlyScan(), ExecInitIndexScan(), ExecOpenIndices(), expandTableLikeClause(), FindReplTupleInLocalRel(), FindUsableIndexForReplicaIdentityFull(), get_actual_variable_range(), get_relation_info(), gin_clean_pending_list(), gincostestimate(), gist_page_items(), index_concurrently_build(), index_concurrently_create_copy(), index_concurrently_set_dead(), index_drop(), indexam_property(), infer_arbiter_indexes(), InitCatCachePhase2(), lookup_ts_config_cache(), open_lo_relation(), pg_nextoid(), plan_create_index_workers(), refresh_by_match_merge(), RefreshMatViewByOid(), reindex_index(), ReindexRelationConcurrently(), RelationFindReplTupleByIndex(), RelationGetIndexAttrBitmap(), RelationTruncateIndexes(), SetIndexStorageProperties(), systable_beginscan(), toast_open_indexes(), transformIndexConstraint(), TryReuseIndex(), vac_open_indexes(), and validate_index().
void index_parallelrescan | ( | IndexScanDesc | scan | ) |
Definition at line 523 of file indexam.c.
References IndexAmRoutine::amparallelrescan, IndexScanDescData::indexRelation, RelationData::rd_indam, SCAN_CHECKS, table_index_fetch_reset(), and IndexScanDescData::xs_heapfetch.
Referenced by ExecIndexOnlyScanReInitializeDSM(), and ExecIndexScanReInitializeDSM().
Size index_parallelscan_estimate | ( | Relation | indexRelation, |
int | nkeys, | ||
int | norderbys, | ||
Snapshot | snapshot | ||
) |
Definition at line 453 of file indexam.c.
References add_size(), IndexAmRoutine::amestimateparallelscan, Assert, EstimateSnapshotSpace(), InvalidSnapshot, MAXALIGN, RelationData::rd_indam, and RELATION_CHECKS.
Referenced by ExecIndexOnlyScanEstimate(), and ExecIndexScanEstimate().
void index_parallelscan_initialize | ( | Relation | heapRelation, |
Relation | indexRelation, | ||
Snapshot | snapshot, | ||
ParallelIndexScanDesc | target | ||
) |
Definition at line 490 of file indexam.c.
References add_size(), IndexAmRoutine::aminitparallelscan, Assert, EstimateSnapshotSpace(), InvalidSnapshot, MAXALIGN, OffsetToPointer, ParallelIndexScanDescData::ps_indexlocator, ParallelIndexScanDescData::ps_locator, ParallelIndexScanDescData::ps_offset, ParallelIndexScanDescData::ps_snapshot_data, RelationData::rd_indam, RelationData::rd_locator, RELATION_CHECKS, and SerializeSnapshot().
Referenced by ExecIndexOnlyScanInitializeDSM(), and ExecIndexScanInitializeDSM().
void index_rescan | ( | IndexScanDesc | scan, |
ScanKey | keys, | ||
int | nkeys, | ||
ScanKey | orderbys, | ||
int | norderbys | ||
) |
Definition at line 352 of file indexam.c.
References IndexAmRoutine::amrescan, Assert, CHECK_SCAN_PROCEDURE, IndexScanDescData::indexRelation, IndexScanDescData::kill_prior_tuple, IndexScanDescData::numberOfKeys, IndexScanDescData::numberOfOrderBys, RelationData::rd_indam, SCAN_CHECKS, table_index_fetch_reset(), IndexScanDescData::xs_heap_continue, and IndexScanDescData::xs_heapfetch.
Referenced by check_exclusion_or_unique_constraint(), ExecIndexOnlyScanInitializeDSM(), ExecIndexOnlyScanInitializeWorker(), ExecIndexScanInitializeDSM(), ExecIndexScanInitializeWorker(), ExecInitBitmapIndexScan(), ExecReScanBitmapIndexScan(), ExecReScanIndexOnlyScan(), ExecReScanIndexScan(), get_actual_variable_endpoint(), heapam_relation_copy_for_cluster(), IndexNext(), IndexNextWithReorder(), IndexOnlyNext(), MultiExecBitmapIndexScan(), RelationFindReplTupleByIndex(), systable_beginscan(), and systable_beginscan_ordered().
void index_restrpos | ( | IndexScanDesc | scan | ) |
Definition at line 432 of file indexam.c.
References IndexAmRoutine::amrestrpos, Assert, CHECK_SCAN_PROCEDURE, IndexScanDescData::indexRelation, IsMVCCSnapshot, IndexScanDescData::kill_prior_tuple, RelationData::rd_indam, SCAN_CHECKS, table_index_fetch_reset(), IndexScanDescData::xs_heap_continue, IndexScanDescData::xs_heapfetch, and IndexScanDescData::xs_snapshot.
Referenced by ExecIndexOnlyRestrPos(), and ExecIndexRestrPos().
void index_store_float8_orderby_distances | ( | IndexScanDesc | scan, |
Oid * | orderByTypes, | ||
IndexOrderByDistance * | distances, | ||
bool | recheckOrderBy | ||
) |
Definition at line 930 of file indexam.c.
References Assert, DatumGetPointer(), elog, ERROR, Float4GetDatum(), Float8GetDatum(), i, IndexScanDescData::numberOfOrderBys, pfree(), value, IndexScanDescData::xs_orderbynulls, IndexScanDescData::xs_orderbyvals, and IndexScanDescData::xs_recheckorderby.
Referenced by getNextNearest(), and spggettuple().
IndexBulkDeleteResult* index_vacuum_cleanup | ( | IndexVacuumInfo * | info, |
IndexBulkDeleteResult * | istat | ||
) |
Definition at line 771 of file indexam.c.
References IndexAmRoutine::amvacuumcleanup, CHECK_REL_PROCEDURE, IndexVacuumInfo::index, RelationData::rd_indam, and RELATION_CHECKS.
Referenced by do_analyze_rel(), and vac_cleanup_one_index().
Definition at line 152 of file indexam.c.
References try_relation_open(), and validate_relation_kind().
Referenced by reindex_index().
|
inlinestatic |
Definition at line 197 of file indexam.c.
References ereport, errcode(), errmsg(), ERROR, RelationData::rd_rel, and RelationGetRelationName.
Referenced by index_open(), and try_index_open().