mirror of
https://github.com/postgres/postgres.git
synced 2026-04-10 03:26:23 -04:00
Previously, parallel index and index-only scans packed the parallel scan descriptor and shared instrumentation (for EXPLAIN ANALYZE) into a single DSM allocation. Since scans may be instrumented without being parallel-aware, and vice versa, using separate DSM chunks -- each with its own TOC key -- is cleaner. A future commit will extend this pattern to other scan node types. Author: Melanie Plageman <melanieplageman@gmail.com> Reviewed-by: Tomas Vondra <tomas@vondra.me> Discussion: https://postgr.es/m/flat/a177a6dd-240b-455a-8f25-aca0b1c08c6e%40vondra.me
54 lines
2.3 KiB
C
54 lines
2.3 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* nodeIndexscan.h
|
|
*
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/executor/nodeIndexscan.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef NODEINDEXSCAN_H
|
|
#define NODEINDEXSCAN_H
|
|
|
|
#include "access/genam.h"
|
|
#include "access/parallel.h"
|
|
#include "nodes/execnodes.h"
|
|
|
|
extern IndexScanState *ExecInitIndexScan(IndexScan *node, EState *estate, int eflags);
|
|
extern void ExecEndIndexScan(IndexScanState *node);
|
|
extern void ExecIndexMarkPos(IndexScanState *node);
|
|
extern void ExecIndexRestrPos(IndexScanState *node);
|
|
extern void ExecReScanIndexScan(IndexScanState *node);
|
|
extern void ExecIndexScanEstimate(IndexScanState *node, ParallelContext *pcxt);
|
|
extern void ExecIndexScanInitializeDSM(IndexScanState *node, ParallelContext *pcxt);
|
|
extern void ExecIndexScanReInitializeDSM(IndexScanState *node, ParallelContext *pcxt);
|
|
extern void ExecIndexScanInitializeWorker(IndexScanState *node,
|
|
ParallelWorkerContext *pwcxt);
|
|
extern void ExecIndexScanInstrumentEstimate(IndexScanState *node,
|
|
ParallelContext *pcxt);
|
|
extern void ExecIndexScanInstrumentInitDSM(IndexScanState *node,
|
|
ParallelContext *pcxt);
|
|
extern void ExecIndexScanInstrumentInitWorker(IndexScanState *node,
|
|
ParallelWorkerContext *pwcxt);
|
|
extern void ExecIndexScanRetrieveInstrumentation(IndexScanState *node);
|
|
|
|
/*
|
|
* These routines are exported to share code with nodeIndexonlyscan.c and
|
|
* nodeBitmapIndexscan.c
|
|
*/
|
|
extern void ExecIndexBuildScanKeys(PlanState *planstate, Relation index,
|
|
List *quals, bool isorderby,
|
|
ScanKey *scanKeys, int *numScanKeys,
|
|
IndexRuntimeKeyInfo **runtimeKeys, int *numRuntimeKeys,
|
|
IndexArrayKeyInfo **arrayKeys, int *numArrayKeys);
|
|
extern void ExecIndexEvalRuntimeKeys(ExprContext *econtext,
|
|
IndexRuntimeKeyInfo *runtimeKeys, int numRuntimeKeys);
|
|
extern bool ExecIndexEvalArrayKeys(ExprContext *econtext,
|
|
IndexArrayKeyInfo *arrayKeys, int numArrayKeys);
|
|
extern bool ExecIndexAdvanceArrayKeys(IndexArrayKeyInfo *arrayKeys, int numArrayKeys);
|
|
|
|
#endif /* NODEINDEXSCAN_H */
|