mirror of
https://github.com/postgres/postgres.git
synced 2026-01-13 12:22:55 +03:00
qualification when the underlying operator is indexable and useOr is true. That is, indexkey op ANY (ARRAY[...]) is effectively translated into an OR combination of one indexscan for each array element. This only works for bitmap index scans, of course, since regular indexscans no longer support OR'ing of scans. There are still some loose ends to clean up before changing 'x IN (list)' to translate as a ScalarArrayOpExpr; for instance predtest.c ought to be taught about it. But this gets the basic functionality in place.
40 lines
1.6 KiB
C
40 lines
1.6 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* nodeIndexscan.h
|
|
*
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* $PostgreSQL: pgsql/src/include/executor/nodeIndexscan.h,v 1.25 2005/11/25 19:47:50 tgl Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef NODEINDEXSCAN_H
|
|
#define NODEINDEXSCAN_H
|
|
|
|
#include "nodes/execnodes.h"
|
|
|
|
extern int ExecCountSlotsIndexScan(IndexScan *node);
|
|
extern IndexScanState *ExecInitIndexScan(IndexScan *node, EState *estate);
|
|
extern TupleTableSlot *ExecIndexScan(IndexScanState *node);
|
|
extern void ExecEndIndexScan(IndexScanState *node);
|
|
extern void ExecIndexMarkPos(IndexScanState *node);
|
|
extern void ExecIndexRestrPos(IndexScanState *node);
|
|
extern void ExecIndexReScan(IndexScanState *node, ExprContext *exprCtxt);
|
|
|
|
/* routines exported to share code with nodeBitmapIndexscan.c */
|
|
extern void ExecIndexBuildScanKeys(PlanState *planstate, List *quals,
|
|
List *strategies, List *subtypes,
|
|
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 */
|