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.2 1996/10/19 04:05:44 scrappy Exp $
12 *-------------------------------------------------------------------------
17 #include "access/skey.h"
19 typedef uint16 StrategyNumber;
21 #define InvalidStrategy 0
23 typedef struct StrategyTransformMapData {
24 StrategyNumber strategy[1]; /* VARIABLE LENGTH ARRAY */
25 } StrategyTransformMapData; /* VARIABLE LENGTH STRUCTURE */
27 typedef StrategyTransformMapData *StrategyTransformMap;
29 typedef struct StrategyOperatorData {
30 StrategyNumber strategy;
31 bits16 flags; /* scan qualification flags h/skey.h */
32 } StrategyOperatorData;
34 typedef StrategyOperatorData *StrategyOperator;
36 typedef struct StrategyTermData { /* conjunctive term */
38 StrategyOperatorData operatorData[1]; /* VARIABLE LENGTH */
39 } StrategyTermData; /* VARIABLE LENGTH STRUCTURE */
41 typedef StrategyTermData *StrategyTerm;
43 typedef struct StrategyExpressionData { /* disjunctive normal form */
44 StrategyTerm term[1]; /* VARIABLE LENGTH ARRAY */
45 } StrategyExpressionData; /* VARIABLE LENGTH STRUCTURE */
47 typedef StrategyExpressionData *StrategyExpression;
49 typedef struct StrategyEvaluationData {
50 StrategyNumber maxStrategy;
51 StrategyTransformMap negateTransform;
52 StrategyTransformMap commuteTransform;
53 StrategyTransformMap negateCommuteTransform;
54 StrategyExpression expression[12]; /* XXX VARIABLE LENGTH */
55 } StrategyEvaluationData; /* VARIABLE LENGTH STRUCTURE */
57 typedef StrategyEvaluationData *StrategyEvaluation;
60 * StrategyTransformMapIsValid --
61 * Returns true iff strategy transformation map is valid.
63 #define StrategyTransformMapIsValid(transform) PointerIsValid(transform)
66 #ifndef CorrectStrategies /* XXX this should be removable */
67 #define AMStrategies(foo) 12
68 #else /* !defined(CorrectStrategies) */
69 #define AMStrategies(foo) (foo)
70 #endif /* !defined(CorrectStrategies) */
72 typedef struct StrategyMapData {
73 ScanKeyData entry[1]; /* VARIABLE LENGTH ARRAY */
74 } StrategyMapData; /* VARIABLE LENGTH STRUCTURE */
76 typedef StrategyMapData *StrategyMap;
78 typedef struct IndexStrategyData {
79 StrategyMapData strategyMapData[1]; /* VARIABLE LENGTH ARRAY */
80 } IndexStrategyData; /* VARIABLE LENGTH STRUCTURE */
82 typedef IndexStrategyData *IndexStrategy;