|
PostgreSQL Source Code git master
|
#include "postgres.h"#include "access/amvalidate.h"#include "access/htup_details.h"#include "access/reloptions.h"#include "access/spgist_private.h"#include "access/toast_compression.h"#include "access/transam.h"#include "access/xact.h"#include "catalog/pg_amop.h"#include "commands/vacuum.h"#include "nodes/nodeFuncs.h"#include "parser/parse_coerce.h"#include "storage/bufmgr.h"#include "storage/indexfsm.h"#include "utils/catcache.h"#include "utils/fmgrprotos.h"#include "utils/index_selfuncs.h"#include "utils/lsyscache.h"#include "utils/rel.h"#include "utils/syscache.h"
Go to the source code of this file.
Macros | |
| #define | GET_LUP(c, f) (&(c)->lastUsedPages.cachedPage[((unsigned int) (f)) % SPGIST_CACHED_PAGES]) |
| #define GET_LUP | ( | c, | |
| f | |||
| ) | (&(c)->lastUsedPages.cachedPage[((unsigned int) (f)) % SPGIST_CACHED_PAGES]) |
Definition at line 491 of file spgutils.c.
Definition at line 514 of file spgutils.c.
References SpGistLastUsedPage::blkno, BufferGetBlockNumber(), BufferGetPage(), SpGistLUPCache::cachedPage, fb(), SpGistLastUsedPage::freeSpace, GBUF_INNER_PARITY, GBUF_NULLS, GBUF_PARITY_MASK, GBUF_REQ_LEAF, GBUF_REQ_NULLS, SpGistCache::lastUsedPages, PageGetExactFreeSpace(), spgGetCache(), SPGIST_LEAF, SPGIST_NULLS, SpGistInitBuffer(), SpGistNewBuffer(), and UnlockReleaseBuffer().
Referenced by SpGistGetBuffer().
|
static |
Definition at line 167 of file spgutils.c.
References SpGistTypeDesc::attalign, SpGistTypeDesc::attbyval, SpGistTypeDesc::attlen, SpGistTypeDesc::attstorage, elog, ERROR, fb(), GETSTRUCT(), HeapTupleIsValid, ObjectIdGetDatum(), ReleaseSysCache(), SearchSysCache1(), type, and SpGistTypeDesc::type.
Referenced by spgGetCache().
|
static |
Definition at line 122 of file spgutils.c.
References Assert, elog, ERROR, exprType(), fb(), get_atttype(), getBaseType(), i, InvalidOid, lfirst, list_head(), lnext(), and RelationGetIndexExpressions().
Referenced by spgGetCache().
| TupleDesc getSpGistTupleDesc | ( | Relation | index, |
| SpGistTypeDesc * | keyType | ||
| ) |
Definition at line 316 of file spgutils.c.
References CompactAttribute::attcacheoff, CreateTupleDescCopy(), fb(), i, InvalidCompressionMethod, InvalidOid, populate_compact_attribute(), RelationGetDescr, spgFirstIncludeColumn, spgKeyColumn, TupleDescAttr(), and TupleDescCompactAttr().
Referenced by initSpGistState(), and spgbeginscan().
| void initSpGistState | ( | SpGistState * | state, |
| Relation | index | ||
| ) |
Definition at line 349 of file spgutils.c.
References SpGistCache::attLabelType, SpGistCache::attLeafType, SpGistCache::attPrefixType, SpGistCache::attType, SpGistCache::config, getSpGistTupleDesc(), GetTopTransactionIdIfAny(), palloc0(), SGDTSIZE, and spgGetCache().
Referenced by spgbeginscan(), spgbuild(), spginsert(), and spgvacuumscan().
|
static |
Definition at line 798 of file spgutils.c.
References DatumGetPointer(), fb(), and VARSIZE_ANY().
Referenced by spgFormInnerTuple(), and spgFormNodeTuple().
| void spgDeformLeafTuple | ( | SpGistLeafTuple | tup, |
| TupleDesc | tupleDescriptor, | ||
| Datum * | datums, | ||
| bool * | isnulls, | ||
| bool | keyColumnIsNull | ||
| ) |
Definition at line 1116 of file spgutils.c.
References Assert, fb(), index_deform_tuple_internal(), SGLT_GET_HASNULLMASK, SGLTHDRSZ, and spgKeyColumn.
Referenced by doPickSplit(), and storeGettuple().
| Datum * spgExtractNodeLabels | ( | SpGistState * | state, |
| SpGistInnerTuple | innerTuple | ||
| ) |
Definition at line 1161 of file spgutils.c.
References elog, ERROR, fb(), i, IndexTupleHasNulls(), palloc_array, SGITITERATE, SGITNODEPTR, and SGNTDATUM.
Referenced by spgdoinsert(), and spgInitInnerConsistentIn().
| SpGistDeadTuple spgFormDeadTuple | ( | SpGistState * | state, |
| int | tupstate, | ||
| BlockNumber | blkno, | ||
| OffsetNumber | offnum | ||
| ) |
Definition at line 1086 of file spgutils.c.
References InvalidOffsetNumber, InvalidTransactionId, ItemPointerSet(), ItemPointerSetInvalid(), SpGistDeadTupleData::pointer, SGDTSIZE, SGLT_SET_NEXTOFFSET, SpGistDeadTupleData::size, SPGIST_REDIRECT, SpGistDeadTupleData::tupstate, and SpGistDeadTupleData::xid.
Referenced by spgAddNodeAction(), spgPageIndexMultiDelete(), and spgRedoAddNode().
| SpGistInnerTuple spgFormInnerTuple | ( | SpGistState * | state, |
| bool | hasPrefix, | ||
| Datum | prefix, | ||
| int | nNodes, | ||
| SpGistNodeTuple * | nodes | ||
| ) |
Definition at line 1003 of file spgutils.c.
References elog, ereport, errcode(), errhint(), errmsg(), ERROR, fb(), i, IndexTupleSize(), memcpyInnerDatum(), palloc0(), SGDTSIZE, SGITDATAPTR, SGITHDRSZ, SGITMAXNNODES, SGITMAXPREFIXSIZE, SGITMAXSIZE, SGITNODEPTR, SPGIST_PAGE_CAPACITY, and SpGistGetInnerTypeSize().
Referenced by addNode(), doPickSplit(), and spgSplitNodeAction().
| SpGistLeafTuple spgFormLeafTuple | ( | SpGistState * | state, |
| const ItemPointerData * | heapPtr, | ||
| const Datum * | datums, | ||
| const bool * | isnulls | ||
| ) |
Definition at line 872 of file spgutils.c.
References fb(), heap_compute_data_size(), heap_fill_tuple(), i, InvalidOffsetNumber, MAXALIGN, palloc0(), SGDTSIZE, SGLT_SET_HASNULLMASK, SGLT_SET_NEXTOFFSET, SGLTHDRSZ, and spgKeyColumn.
Referenced by doPickSplit(), and spgdoinsert().
| SpGistNodeTuple spgFormNodeTuple | ( | SpGistState * | state, |
| Datum | label, | ||
| bool | isnull | ||
| ) |
Definition at line 961 of file spgutils.c.
References ereport, errcode(), errmsg(), ERROR, fb(), INDEX_NULL_MASK, INDEX_SIZE_MASK, ItemPointerSetInvalid(), label, memcpyInnerDatum(), palloc0(), SGNTDATAPTR, SGNTHDRSZ, and SpGistGetInnerTypeSize().
Referenced by addNode(), doPickSplit(), and spgSplitNodeAction().
| SpGistCache * spgGetCache | ( | Relation | index | ) |
Definition at line 189 of file spgutils.c.
References Assert, SpGistCache::attLabelType, SpGistCache::attLeafType, SpGistCache::attPrefixType, spgConfigIn::attType, SpGistCache::attType, BUFFER_LOCK_SHARE, BufferGetPage(), SpGistCache::config, elog, ereport, errcode(), errmsg(), ERROR, fb(), fillTypeDesc(), FunctionCall2Coll(), GetIndexInputType(), index_getprocid(), index_getprocinfo(), INDEX_MAX_KEYS, IndexRelationGetNumberOfAttributes, IndexRelationGetNumberOfKeyAttributes, IsBinaryCoercible(), spgConfigOut::labelType, SpGistMetaPageData::lastUsedPages, SpGistCache::lastUsedPages, spgConfigOut::leafType, LockBuffer(), SpGistMetaPageData::magicNumber, MemoryContextAllocZero(), OidIsValid, PointerGetDatum(), spgConfigOut::prefixType, ReadBuffer(), RelationGetDescr, RelationGetRelationName, SPGIST_COMPRESS_PROC, SPGIST_CONFIG_PROC, SPGIST_MAGIC_NUMBER, SPGIST_METAPAGE_BLKNO, SpGistPageGetMeta, spgKeyColumn, TupleDescAttr(), and UnlockReleaseBuffer().
Referenced by allocNewBuffer(), initSpGistState(), spgcanreturn(), SpGistGetBuffer(), and SpGistSetLastUsedPage().
| Datum spghandler | ( | PG_FUNCTION_ARGS | ) |
Definition at line 44 of file spgutils.c.
References fb(), InvalidOid, PG_RETURN_POINTER, spgadjustmembers(), spgbeginscan(), spgbuild(), spgbuildempty(), spgbulkdelete(), spgcanreturn(), spgcostestimate(), spgendscan(), spggetbitmap(), spggettuple(), spginsert(), SPGIST_OPTIONS_PROC, SPGISTNProc, spgoptions(), spgproperty(), spgrescan(), spgvacuumcleanup(), spgvalidate(), IndexAmRoutine::type, VACUUM_OPTION_PARALLEL_BULKDEL, and VACUUM_OPTION_PARALLEL_COND_CLEANUP.
Definition at line 570 of file spgutils.c.
References allocNewBuffer(), Assert, BufferGetPage(), ConditionalLockBuffer(), elog, ERROR, fb(), GBUF_REQ_LEAF, GBUF_REQ_NULLS, GET_LUP, InvalidBlockNumber, Min, PageGetExactFreeSpace(), PageIsEmpty(), PageIsNew(), ReadBuffer(), ReleaseBuffer(), spgGetCache(), SPGIST_LEAF, SPGIST_NULLS, SPGIST_PAGE_CAPACITY, SpGistBlockIsFixed, SpGistGetTargetPageFreeSpace, SpGistInitBuffer(), SpGistPageIsDeleted, SpGistPageIsLeaf, SpGistPageStoresNulls, and UnlockReleaseBuffer().
Referenced by doPickSplit(), moveLeafs(), spgAddNodeAction(), spgdoinsert(), and spgSplitNodeAction().
| unsigned int SpGistGetInnerTypeSize | ( | SpGistTypeDesc * | att, |
| Datum | datum | ||
| ) |
Definition at line 780 of file spgutils.c.
References DatumGetPointer(), fb(), MAXALIGN, and VARSIZE_ANY().
Referenced by spgFormInnerTuple(), and spgFormNodeTuple().
| Size SpGistGetLeafTupleSize | ( | TupleDesc | tupleDescriptor, |
| const Datum * | datums, | ||
| const bool * | isnulls | ||
| ) |
Definition at line 819 of file spgutils.c.
References fb(), heap_compute_data_size(), i, MAXALIGN, SGDTSIZE, and SGLTHDRSZ.
Referenced by spgdoinsert().
Definition at line 723 of file spgutils.c.
References Assert, b, BufferGetPage(), BufferGetPageSize(), fb(), and SpGistInitPage().
Referenced by allocNewBuffer(), doPickSplit(), spgbuild(), SpGistGetBuffer(), spgRedoAddLeaf(), spgRedoAddNode(), spgRedoMoveLeafs(), spgRedoPickSplit(), and spgRedoSplitTuple().
Definition at line 733 of file spgutils.c.
References SpGistLastUsedPage::blkno, SpGistLUPCache::cachedPage, fb(), i, InvalidBlockNumber, SpGistMetaPageData::lastUsedPages, SpGistMetaPageData::magicNumber, SPGIST_CACHED_PAGES, SPGIST_MAGIC_NUMBER, SPGIST_META, SpGistInitPage(), and SpGistPageGetMeta.
Referenced by spgbuild(), and spgbuildempty().
Definition at line 709 of file spgutils.c.
References fb(), SpGistPageOpaqueData::flags, PageInit(), SpGistPageOpaqueData::spgist_page_id, SPGIST_PAGE_ID, and SpGistPageGetOpaque.
Referenced by spgbuildempty(), SpGistInitBuffer(), and SpGistInitMetapage().
Definition at line 395 of file spgutils.c.
References BMR_REL, BUFFER_LOCK_UNLOCK, BufferGetPage(), ConditionalLockBuffer(), EB_LOCK_FIRST, ExtendBufferedRel(), fb(), GetFreeIndexPage(), InvalidBlockNumber, LockBuffer(), MAIN_FORKNUM, PageIsEmpty(), PageIsNew(), ReadBuffer(), ReleaseBuffer(), SpGistBlockIsFixed, and SpGistPageIsDeleted.
Referenced by allocNewBuffer(), and spgbuild().
| OffsetNumber SpGistPageAddNewItem | ( | SpGistState * | state, |
| Page | page, | ||
| const void * | item, | ||
| Size | size, | ||
| OffsetNumber * | startOffset, | ||
| bool | errorOK | ||
| ) |
Definition at line 1204 of file spgutils.c.
References Assert, elog, ERROR, fb(), FirstOffsetNumber, i, InvalidOffsetNumber, MAXALIGN, SpGistPageOpaqueData::nPlaceholder, PageAddItem, PageGetExactFreeSpace(), PageGetItem(), PageGetItemId(), PageGetMaxOffsetNumber(), PageIndexTupleDelete(), PANIC, SGDTSIZE, SPGIST_PLACEHOLDER, and SpGistPageGetOpaque.
Referenced by addLeafTuple(), doPickSplit(), moveLeafs(), spgAddNodeAction(), and spgSplitNodeAction().
Definition at line 674 of file spgutils.c.
References BufferGetBlockNumber(), BufferGetPage(), fb(), GBUF_INNER_PARITY, GBUF_LEAF, GBUF_NULLS, GET_LUP, InvalidBlockNumber, PageGetExactFreeSpace(), spgGetCache(), SpGistBlockIsFixed, SpGistPageIsLeaf, and SpGistPageStoresNulls.
Referenced by doPickSplit(), moveLeafs(), spgAddNodeAction(), spgdoinsert(), spgMatchNodeAction(), spgprocesspending(), spgSplitNodeAction(), and spgvacuumpage().
Definition at line 451 of file spgutils.c.
References BufferGetPage(), ConditionalLockBuffer(), fb(), SpGistMetaPageData::lastUsedPages, SpGistCache::lastUsedPages, MarkBufferDirty(), ReadBuffer(), ReleaseBuffer(), SPGIST_METAPAGE_BLKNO, SpGistPageGetMeta, and UnlockReleaseBuffer().
Referenced by spgbuild(), spginsert(), and spgvacuumscan().
Definition at line 760 of file spgutils.c.
References build_reloptions(), fb(), fillfactor, lengthof, RELOPT_KIND_SPGIST, RELOPT_TYPE_INT, and validate().
Referenced by spghandler().
| bool spgproperty | ( | Oid | index_oid, |
| int | attno, | ||
| IndexAMProperty | prop, | ||
| const char * | propname, | ||
| bool * | res, | ||
| bool * | isnull | ||
| ) |
Definition at line 1299 of file spgutils.c.
References AMPROP_DISTANCE_ORDERABLE, fb(), get_index_column_opclass(), get_op_rettype(), get_opclass_opfamily_and_input_type(), GETSTRUCT(), i, ObjectIdGetDatum(), OidIsValid, opfamily_can_sort_type(), ReleaseSysCacheList, and SearchSysCacheList1.
Referenced by spghandler().