1 /*-------------------------------------------------------------------------
4 * index strategy type definitions
5 * (separated out from original istrat.h to avoid circular refs)
8 * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
9 * Portions Copyright (c) 1994, Regents of the University of California
11 * $Id: strat.h,v 1.27 2003/08/04 02:40:10 momjian Exp $
13 *-------------------------------------------------------------------------
18 #include "access/skey.h"
21 typedef uint16 StrategyNumber;
23 #define InvalidStrategy 0
25 typedef struct StrategyTransformMapData
27 StrategyNumber strategy[1]; /* VARIABLE LENGTH ARRAY */
28 } StrategyTransformMapData; /* VARIABLE LENGTH STRUCTURE */
30 typedef StrategyTransformMapData *StrategyTransformMap;
32 typedef struct StrategyOperatorData
34 StrategyNumber strategy;
35 bits16 flags; /* scan qualification flags, see skey.h */
36 } StrategyOperatorData;
38 typedef StrategyOperatorData *StrategyOperator;
40 typedef struct StrategyTermData
41 { /* conjunctive term */
43 StrategyOperatorData operatorData[1]; /* VARIABLE LENGTH ARRAY */
44 } StrategyTermData; /* VARIABLE LENGTH STRUCTURE */
46 typedef StrategyTermData *StrategyTerm;
48 typedef struct StrategyExpressionData
49 { /* disjunctive normal form */
50 StrategyTerm term[1]; /* VARIABLE LENGTH ARRAY */
51 } StrategyExpressionData; /* VARIABLE LENGTH STRUCTURE */
53 typedef StrategyExpressionData *StrategyExpression;
55 typedef struct StrategyEvaluationData
57 StrategyNumber maxStrategy;
58 /* each of these must point to an array of maxStrategy elements: */
59 StrategyTransformMap negateTransform;
60 StrategyTransformMap commuteTransform;
61 StrategyTransformMap negateCommuteTransform;
62 StrategyExpression *expression;
63 } StrategyEvaluationData;
65 typedef StrategyEvaluationData *StrategyEvaluation;
68 * StrategyTransformMapIsValid
69 * Returns true iff strategy transformation map is valid.
71 #define StrategyTransformMapIsValid(transform) PointerIsValid(transform)
74 #define AMStrategies(foo) (foo)
76 typedef struct StrategyMapData
78 ScanKeyData entry[1]; /* VARIABLE LENGTH ARRAY */
79 } StrategyMapData; /* VARIABLE LENGTH STRUCTURE */
81 typedef StrategyMapData *StrategyMap;
83 typedef struct IndexStrategyData
85 StrategyMapData strategyMapData[1]; /* VARIABLE LENGTH ARRAY */
86 } IndexStrategyData; /* VARIABLE LENGTH STRUCTURE */
88 typedef IndexStrategyData *IndexStrategy;