1 /*-------------------------------------------------------------------------
4 * index strategy type definitions
5 * (separated out from original istrat.h to avoid circular refs)
8 * Copyright (c) 1994, Regents of the University of California
10 * $Id: strat.h,v 1.5 1997/09/07 04:56:14 momjian Exp $
12 *-------------------------------------------------------------------------
17 #include <access/skey.h>
19 typedef uint16 StrategyNumber;
21 #define InvalidStrategy 0
23 typedef struct StrategyTransformMapData
25 StrategyNumber strategy[1];/* VARIABLE LENGTH ARRAY */
26 } StrategyTransformMapData; /* VARIABLE LENGTH
30 typedef StrategyTransformMapData *StrategyTransformMap;
32 typedef struct StrategyOperatorData
34 StrategyNumber strategy;
35 bits16 flags; /* scan qualification flags h/skey.h */
36 } StrategyOperatorData;
38 typedef StrategyOperatorData *StrategyOperator;
40 typedef struct StrategyTermData
41 { /* conjunctive term */
43 StrategyOperatorData operatorData[1]; /* VARIABLE LENGTH */
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 StrategyTransformMap negateTransform;
59 StrategyTransformMap commuteTransform;
60 StrategyTransformMap negateCommuteTransform;
61 StrategyExpression expression[12]; /* XXX VARIABLE LENGTH */
62 } StrategyEvaluationData; /* VARIABLE LENGTH STRUCTURE */
64 typedef StrategyEvaluationData *StrategyEvaluation;
67 * StrategyTransformMapIsValid --
68 * Returns true iff strategy transformation map is valid.
70 #define StrategyTransformMapIsValid(transform) PointerIsValid(transform)
73 #ifndef CorrectStrategies /* XXX this should be removable */
74 #define AMStrategies(foo) 12
75 #else /* !defined(CorrectStrategies) */
76 #define AMStrategies(foo) (foo)
77 #endif /* !defined(CorrectStrategies) */
79 typedef struct StrategyMapData
81 ScanKeyData entry[1]; /* VARIABLE LENGTH ARRAY */
82 } StrategyMapData;/* VARIABLE LENGTH STRUCTURE */
84 typedef StrategyMapData *StrategyMap;
86 typedef struct IndexStrategyData
88 StrategyMapData strategyMapData[1]; /* VARIABLE LENGTH ARRAY */
89 } IndexStrategyData; /* VARIABLE LENGTH STRUCTURE */
91 typedef IndexStrategyData *IndexStrategy;