]> granicus.if.org Git - postgresql/blob - src/include/access/strat.h
Another PGINDENT run that changes variable indenting and case label indenting. Also...
[postgresql] / 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.6 1997/09/08 02:34:27 momjian 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 {
25         StrategyNumber strategy[1]; /* VARIABLE LENGTH ARRAY */
26 }                       StrategyTransformMapData;       /* VARIABLE LENGTH
27
28                                                                                  *
29                                                                                  * STRUCTURE */
30
31 typedef StrategyTransformMapData *StrategyTransformMap;
32
33 typedef struct StrategyOperatorData
34 {
35         StrategyNumber strategy;
36         bits16          flags;                  /* scan qualification flags h/skey.h */
37 }                       StrategyOperatorData;
38
39 typedef StrategyOperatorData *StrategyOperator;
40
41 typedef struct StrategyTermData
42 {                                                               /* conjunctive term */
43         uint16          degree;
44         StrategyOperatorData operatorData[1];           /* VARIABLE LENGTH */
45 }                       StrategyTermData;       /* VARIABLE LENGTH STRUCTURE */
46
47 typedef StrategyTermData *StrategyTerm;
48
49 typedef struct StrategyExpressionData
50 {                                                               /* disjunctive normal form */
51         StrategyTerm term[1];           /* VARIABLE LENGTH ARRAY */
52 }                       StrategyExpressionData;         /* VARIABLE LENGTH STRUCTURE */
53
54 typedef StrategyExpressionData *StrategyExpression;
55
56 typedef struct StrategyEvaluationData
57 {
58         StrategyNumber maxStrategy;
59         StrategyTransformMap negateTransform;
60         StrategyTransformMap commuteTransform;
61         StrategyTransformMap negateCommuteTransform;
62         StrategyExpression expression[12];      /* XXX VARIABLE LENGTH */
63 }                       StrategyEvaluationData;         /* VARIABLE LENGTH STRUCTURE */
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 #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) */
79
80 typedef struct StrategyMapData
81 {
82         ScanKeyData entry[1];           /* VARIABLE LENGTH ARRAY */
83 }                       StrategyMapData;        /* VARIABLE LENGTH STRUCTURE */
84
85 typedef StrategyMapData *StrategyMap;
86
87 typedef struct IndexStrategyData
88 {
89         StrategyMapData strategyMapData[1]; /* VARIABLE LENGTH ARRAY */
90 }                       IndexStrategyData;      /* VARIABLE LENGTH STRUCTURE */
91
92 typedef IndexStrategyData *IndexStrategy;
93
94 #endif                                                  /* STRAT_H */