OSDN Git Service

another one cleaned up
[pg-rex/syncrep.git] / src / include / access / strat.h
1 /*-------------------------------------------------------------------------
2  *
3  * strat.h--
4  *    index strategy type definitions
5  *    (separated out from original istrat.h to avoid circular refs)
6  *
7  *
8  * Copyright (c) 1994, Regents of the University of California
9  *
10  * $Id: strat.h,v 1.2 1996/10/19 04:05:44 scrappy Exp $
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef STRAT_H
15 #define STRAT_H
16
17 #include "access/skey.h" 
18
19 typedef uint16  StrategyNumber;
20
21 #define InvalidStrategy 0
22
23 typedef struct StrategyTransformMapData {
24     StrategyNumber      strategy[1];    /* VARIABLE LENGTH ARRAY */
25 } StrategyTransformMapData;     /* VARIABLE LENGTH STRUCTURE */
26
27 typedef StrategyTransformMapData        *StrategyTransformMap;
28
29 typedef struct StrategyOperatorData {
30     StrategyNumber      strategy;
31     bits16              flags;          /* scan qualification flags h/skey.h */
32 } StrategyOperatorData;
33
34 typedef StrategyOperatorData    *StrategyOperator;
35
36 typedef struct StrategyTermData {       /* conjunctive term */
37     uint16                      degree;
38     StrategyOperatorData        operatorData[1];        /* VARIABLE LENGTH */
39 } StrategyTermData;     /* VARIABLE LENGTH STRUCTURE */
40
41 typedef StrategyTermData        *StrategyTerm;
42
43 typedef struct StrategyExpressionData { /* disjunctive normal form */
44     StrategyTerm        term[1];        /* VARIABLE LENGTH ARRAY */
45 } StrategyExpressionData;       /* VARIABLE LENGTH STRUCTURE */
46
47 typedef StrategyExpressionData  *StrategyExpression;
48
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 */
56
57 typedef StrategyEvaluationData  *StrategyEvaluation;
58
59 /*
60  * StrategyTransformMapIsValid --
61  *      Returns true iff strategy transformation map is valid.
62  */
63 #define StrategyTransformMapIsValid(transform) PointerIsValid(transform)
64
65
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) */
71
72 typedef struct StrategyMapData {
73         ScanKeyData             entry[1];       /* VARIABLE LENGTH ARRAY */
74 } StrategyMapData;      /* VARIABLE LENGTH STRUCTURE */
75
76 typedef StrategyMapData *StrategyMap;
77
78 typedef struct IndexStrategyData {
79         StrategyMapData strategyMapData[1];     /* VARIABLE LENGTH ARRAY */
80 } IndexStrategyData;    /* VARIABLE LENGTH STRUCTURE */
81
82 typedef IndexStrategyData       *IndexStrategy;
83
84 #endif /*STRAT_H */