1/*-------------------------------------------------------------------------
2 *
3 * nodeIndexscan.h
4 *
5 *
6 *
7 * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
9 *
10 * src/include/executor/nodeIndexscan.h
11 *
12 *-------------------------------------------------------------------------
13 */
14#ifndef NODEINDEXSCAN_H
15#define NODEINDEXSCAN_H
16
17#include "access/genam.h"
18#include "access/parallel.h"
19#include "nodes/execnodes.h"
20
21extern IndexScanState *ExecInitIndexScan(IndexScan *node, EState *estate, int eflags);
22extern void ExecEndIndexScan(IndexScanState *node);
23extern void ExecIndexMarkPos(IndexScanState *node);
24extern void ExecIndexRestrPos(IndexScanState *node);
25extern void ExecReScanIndexScan(IndexScanState *node);
26extern void ExecIndexScanEstimate(IndexScanState *node, ParallelContext *pcxt);
27extern void ExecIndexScanInitializeDSM(IndexScanState *node, ParallelContext *pcxt);
28extern void ExecIndexScanReInitializeDSM(IndexScanState *node, ParallelContext *pcxt);
29extern void ExecIndexScanInitializeWorker(IndexScanState *node,
30 ParallelWorkerContext *pwcxt);
31
32/*
33 * These routines are exported to share code with nodeIndexonlyscan.c and
34 * nodeBitmapIndexscan.c
35 */
36extern void ExecIndexBuildScanKeys(PlanState *planstate, Relation index,
37 List *quals, bool isorderby,
38 ScanKey *scanKeys, int *numScanKeys,
39 IndexRuntimeKeyInfo **runtimeKeys, int *numRuntimeKeys,
40 IndexArrayKeyInfo **arrayKeys, int *numArrayKeys);
41extern void ExecIndexEvalRuntimeKeys(ExprContext *econtext,
42 IndexRuntimeKeyInfo *runtimeKeys, int numRuntimeKeys);
43extern bool ExecIndexEvalArrayKeys(ExprContext *econtext,
44 IndexArrayKeyInfo *arrayKeys, int numArrayKeys);
45extern bool ExecIndexAdvanceArrayKeys(IndexArrayKeyInfo *arrayKeys, int numArrayKeys);
46
47#endif /* NODEINDEXSCAN_H */
48