OSDN Git Service

Update copyrights to 2003.
[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  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
9  * Portions Copyright (c) 1994, Regents of the University of California
10  *
11  * $Id: strat.h,v 1.27 2003/08/04 02:40:10 momjian Exp $
12  *
13  *-------------------------------------------------------------------------
14  */
15 #ifndef STRAT_H
16 #define STRAT_H
17
18 #include "access/skey.h"
19
20
21 typedef uint16 StrategyNumber;
22
23 #define InvalidStrategy 0
24
25 typedef struct StrategyTransformMapData
26 {
27         StrategyNumber strategy[1]; /* VARIABLE LENGTH ARRAY */
28 } StrategyTransformMapData;             /* VARIABLE LENGTH STRUCTURE */
29
30 typedef StrategyTransformMapData *StrategyTransformMap;
31
32 typedef struct StrategyOperatorData
33 {
34         StrategyNumber strategy;
35         bits16          flags;                  /* scan qualification flags, see skey.h */
36 } StrategyOperatorData;
37
38 typedef StrategyOperatorData *StrategyOperator;
39
40 typedef struct StrategyTermData
41 {                                                               /* conjunctive term */
42         uint16          degree;
43         StrategyOperatorData operatorData[1];           /* VARIABLE LENGTH ARRAY */
44 } StrategyTermData;                             /* VARIABLE LENGTH STRUCTURE */
45
46 typedef StrategyTermData *StrategyTerm;
47
48 typedef struct StrategyExpressionData
49 {                                                               /* disjunctive normal form */
50         StrategyTerm term[1];           /* VARIABLE LENGTH ARRAY */
51 } StrategyExpressionData;               /* VARIABLE LENGTH STRUCTURE */
52
53 typedef StrategyExpressionData *StrategyExpression;
54
55 typedef struct StrategyEvaluationData
56 {
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;
64
65 typedef StrategyEvaluationData *StrategyEvaluation;
66
67 /*
68  * StrategyTransformMapIsValid
69  *              Returns true iff strategy transformation map is valid.
70  */
71 #define StrategyTransformMapIsValid(transform) PointerIsValid(transform)
72
73
74 #define AMStrategies(foo)               (foo)
75
76 typedef struct StrategyMapData
77 {
78         ScanKeyData entry[1];           /* VARIABLE LENGTH ARRAY */
79 } StrategyMapData;                              /* VARIABLE LENGTH STRUCTURE */
80
81 typedef StrategyMapData *StrategyMap;
82
83 typedef struct IndexStrategyData
84 {
85         StrategyMapData strategyMapData[1]; /* VARIABLE LENGTH ARRAY */
86 } IndexStrategyData;                    /* VARIABLE LENGTH STRUCTURE */
87
88 typedef IndexStrategyData *IndexStrategy;
89
90 #endif   /* STRAT_H */