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.6 1997/09/08 02:34:27 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
31 typedef StrategyTransformMapData *StrategyTransformMap;
33 typedef struct StrategyOperatorData
35 StrategyNumber strategy;
36 bits16 flags; /* scan qualification flags h/skey.h */
37 } StrategyOperatorData;
39 typedef StrategyOperatorData *StrategyOperator;
41 typedef struct StrategyTermData
42 { /* conjunctive term */
44 StrategyOperatorData operatorData[1]; /* VARIABLE LENGTH */
45 } StrategyTermData; /* VARIABLE LENGTH STRUCTURE */
47 typedef StrategyTermData *StrategyTerm;
49 typedef struct StrategyExpressionData
50 { /* disjunctive normal form */
51 StrategyTerm term[1]; /* VARIABLE LENGTH ARRAY */
52 } StrategyExpressionData; /* VARIABLE LENGTH STRUCTURE */
54 typedef StrategyExpressionData *StrategyExpression;
56 typedef struct StrategyEvaluationData
58 StrategyNumber maxStrategy;
59 StrategyTransformMap negateTransform;
60 StrategyTransformMap commuteTransform;
61 StrategyTransformMap negateCommuteTransform;
62 StrategyExpression expression[12]; /* XXX VARIABLE LENGTH */
63 } StrategyEvaluationData; /* VARIABLE LENGTH STRUCTURE */
65 typedef StrategyEvaluationData *StrategyEvaluation;
68 * StrategyTransformMapIsValid --
69 * Returns true iff strategy transformation map is valid.
71 #define StrategyTransformMapIsValid(transform) PointerIsValid(transform)
74 #ifndef CorrectStrategies /* XXX this should be removable */
75 #define AMStrategies(foo) 12
76 #else /* !defined(CorrectStrategies) */
77 #define AMStrategies(foo) (foo)
78 #endif /* !defined(CorrectStrategies) */
80 typedef struct StrategyMapData
82 ScanKeyData entry[1]; /* VARIABLE LENGTH ARRAY */
83 } StrategyMapData; /* VARIABLE LENGTH STRUCTURE */
85 typedef StrategyMapData *StrategyMap;
87 typedef struct IndexStrategyData
89 StrategyMapData strategyMapData[1]; /* VARIABLE LENGTH ARRAY */
90 } IndexStrategyData; /* VARIABLE LENGTH STRUCTURE */
92 typedef IndexStrategyData *IndexStrategy;