122 bool tuple_from_heap =
false;
180 elog(
ERROR,
"non-MVCC snapshots are not supported in index-only scans");
189 tuple_from_heap =
true;
212 elog(
ERROR,
"no data returned for index-only scan");
238 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
239 errmsg(
"lossy distance functions are not supported in index-only scans")));
245 if (!tuple_from_heap)
327 elog(
ERROR,
"EvalPlanQual recheck is not supported in index-only scans");
421 if (indexRelationDesc)
438 if (epqstate != NULL)
457 elog(
ERROR,
"unexpected ExecIndexOnlyMarkPos call in EPQ recheck");
486 elog(
ERROR,
"unexpected ExecIndexOnlyRestrPos call in EPQ recheck");
645 indnkeyatts = indexRelation->
rd_index->indnkeyatts;
Datum idx(PG_FUNCTION_ARGS)
void ReleaseBuffer(Buffer buffer)
#define Assert(condition)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
void ExecReScan(PlanState *node)
ExprState * ExecInitQual(List *qual, PlanState *parent)
void ExecAssignScanProjectionInfoWithVarno(ScanState *node, int varno)
TupleTableSlot * ExecScan(ScanState *node, ExecScanAccessMtd accessMtd, ExecScanRecheckMtd recheckMtd)
void ExecScanReScan(ScanState *node)
const TupleTableSlotOps TTSOpsVirtual
TupleTableSlot * ExecStoreVirtualTuple(TupleTableSlot *slot)
void ExecInitScanTupleSlot(EState *estate, ScanState *scanstate, TupleDesc tupledesc, const TupleTableSlotOps *tts_ops)
void ExecInitResultTypeTL(PlanState *planstate)
TupleDesc ExecTypeFromTL(List *targetList)
TupleTableSlot * ExecAllocTableSlot(List **tupleTable, TupleDesc desc, const TupleTableSlotOps *tts_ops)
void ExecForceStoreHeapTuple(HeapTuple tuple, TupleTableSlot *slot, bool shouldFree)
void ExecAssignExprContext(EState *estate, PlanState *planstate)
Relation ExecOpenScanRelation(EState *estate, Index scanrelid, int eflags)
#define InstrCountTuples2(node, delta)
#define InstrCountFiltered2(node, delta)
static RangeTblEntry * exec_rt_fetch(Index rti, EState *estate)
#define ResetExprContext(econtext)
TupleTableSlot *(* ExecScanAccessMtd)(ScanState *node)
bool(* ExecScanRecheckMtd)(ScanState *node, TupleTableSlot *slot)
static bool ExecQualAndReset(ExprState *state, ExprContext *econtext)
#define EXEC_FLAG_EXPLAIN_ONLY
void index_restrpos(IndexScanDesc scan)
IndexScanDesc index_beginscan_parallel(Relation heaprel, Relation indexrel, int nkeys, int norderbys, ParallelIndexScanDesc pscan)
void index_close(Relation relation, LOCKMODE lockmode)
ItemPointer index_getnext_tid(IndexScanDesc scan, ScanDirection direction)
IndexScanDesc index_beginscan(Relation heapRelation, Relation indexRelation, Snapshot snapshot, int nkeys, int norderbys)
bool index_fetch_heap(IndexScanDesc scan, TupleTableSlot *slot)
void index_markpos(IndexScanDesc scan)
void index_endscan(IndexScanDesc scan)
Size index_parallelscan_estimate(Relation indexRelation, int nkeys, int norderbys, Snapshot snapshot)
void index_parallelscan_initialize(Relation heapRelation, Relation indexRelation, Snapshot snapshot, ParallelIndexScanDesc target)
Relation index_open(Oid relationId, LOCKMODE lockmode)
void index_parallelrescan(IndexScanDesc scan)
void index_rescan(IndexScanDesc scan, ScanKey keys, int nkeys, ScanKey orderbys, int norderbys)
void index_deform_tuple(IndexTuple tup, TupleDesc tupleDescriptor, Datum *values, bool *isnull)
static BlockNumber ItemPointerGetBlockNumber(const ItemPointerData *pointer)
void * MemoryContextAlloc(MemoryContext context, Size size)
#define CHECK_FOR_INTERRUPTS()
void namestrcpy(Name name, const char *str)
void ExecEndIndexOnlyScan(IndexOnlyScanState *node)
static TupleTableSlot * IndexOnlyNext(IndexOnlyScanState *node)
static void StoreIndexTuple(IndexOnlyScanState *node, TupleTableSlot *slot, IndexTuple itup, TupleDesc itupdesc)
void ExecIndexOnlyScanEstimate(IndexOnlyScanState *node, ParallelContext *pcxt)
void ExecReScanIndexOnlyScan(IndexOnlyScanState *node)
void ExecIndexOnlyRestrPos(IndexOnlyScanState *node)
void ExecIndexOnlyScanInitializeWorker(IndexOnlyScanState *node, ParallelWorkerContext *pwcxt)
static TupleTableSlot * ExecIndexOnlyScan(PlanState *pstate)
static bool IndexOnlyRecheck(IndexOnlyScanState *node, TupleTableSlot *slot)
IndexOnlyScanState * ExecInitIndexOnlyScan(IndexOnlyScan *node, EState *estate, int eflags)
void ExecIndexOnlyMarkPos(IndexOnlyScanState *node)
void ExecIndexOnlyScanReInitializeDSM(IndexOnlyScanState *node, ParallelContext *pcxt)
void ExecIndexOnlyScanInitializeDSM(IndexOnlyScanState *node, ParallelContext *pcxt)
void ExecIndexBuildScanKeys(PlanState *planstate, Relation index, List *quals, bool isorderby, ScanKey *scanKeys, int *numScanKeys, IndexRuntimeKeyInfo **runtimeKeys, int *numRuntimeKeys, IndexArrayKeyInfo **arrayKeys, int *numArrayKeys)
void ExecIndexEvalRuntimeKeys(ExprContext *econtext, IndexRuntimeKeyInfo *runtimeKeys, int numRuntimeKeys)
#define castNode(_type_, nodeptr)
static char * DatumGetCString(Datum X)
static Datum NameGetDatum(const NameData *X)
void PredicateLockPage(Relation relation, BlockNumber blkno, Snapshot snapshot)
#define RelationGetDescr(relation)
#define ScanDirectionCombine(a, b)
void shm_toc_insert(shm_toc *toc, uint64 key, void *address)
void * shm_toc_allocate(shm_toc *toc, Size nbytes)
void * shm_toc_lookup(shm_toc *toc, uint64 key, bool noError)
#define shm_toc_estimate_chunk(e, sz)
#define shm_toc_estimate_keys(e, cnt)
ExecAuxRowMark ** relsubs_rowmark
TupleTableSlot ** relsubs_slot
ScanDirection es_direction
struct EPQState * es_epq_active
MemoryContext ecxt_per_tuple_memory
TupleTableSlot * ecxt_scantuple
TupleTableSlot * ioss_TableSlot
bool ioss_RuntimeKeysReady
int ioss_NameCStringCount
struct ScanKeyData * ioss_ScanKeys
struct ScanKeyData * ioss_OrderByKeys
struct IndexScanDescData * ioss_ScanDesc
ExprContext * ioss_RuntimeContext
AttrNumber * ioss_NameCStringAttNums
Relation ioss_RelationDesc
IndexRuntimeKeyInfo * ioss_RuntimeKeys
struct TupleDescData * xs_hitupdesc
struct TupleDescData * xs_itupdesc
shm_toc_estimator estimator
ExprContext * ps_ExprContext
ExecProcNodeMtd ExecProcNode
Relation ss_currentRelation
TupleTableSlot * ss_ScanTupleSlot
struct TableScanDescData * ss_currentScanDesc
TupleDesc tts_tupleDescriptor
const TupleTableSlotOps * table_slot_callbacks(Relation relation)
#define TupleDescAttr(tupdesc, i)
static TupleTableSlot * ExecClearTuple(TupleTableSlot *slot)
#define VM_ALL_VISIBLE(r, b, v)