OSDN Git Service

Moved from backend/access to include/access
[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.1 1996/08/27 21:50:25 scrappy Exp $
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef STRAT_H
15 #define STRAT_H
16
17 #include "postgres.h"
18 #include "access/attnum.h"
19 #include "access/skey.h"
20
21 typedef uint16  StrategyNumber;
22
23 #define InvalidStrategy 0
24
25 typedef struct StrategyTransformMapData {
26     StrategyNumber      strategy[1];    /* VARIABLE LENGTH ARRAY */
27 } StrategyTransformMapData;     /* VARIABLE LENGTH STRUCTURE */
28
29 typedef StrategyTransformMapData        *StrategyTransformMap;
30
31 typedef struct StrategyOperatorData {
32     StrategyNumber      strategy;
33     bits16              flags;          /* scan qualification flags h/skey.h */
34 } StrategyOperatorData;
35
36 typedef StrategyOperatorData    *StrategyOperator;
37
38 typedef struct StrategyTermData {       /* conjunctive term */
39     uint16                      degree;
40     StrategyOperatorData        operatorData[1];        /* VARIABLE LENGTH */
41 } StrategyTermData;     /* VARIABLE LENGTH STRUCTURE */
42
43 typedef StrategyTermData        *StrategyTerm;
44
45 typedef struct StrategyExpressionData { /* disjunctive normal form */
46     StrategyTerm        term[1];        /* VARIABLE LENGTH ARRAY */
47 } StrategyExpressionData;       /* VARIABLE LENGTH STRUCTURE */
48
49 typedef StrategyExpressionData  *StrategyExpression;
50
51 typedef struct StrategyEvaluationData {
52     StrategyNumber              maxStrategy;
53     StrategyTransformMap        negateTransform;
54     StrategyTransformMap        commuteTransform;
55     StrategyTransformMap        negateCommuteTransform;
56     StrategyExpression  expression[12]; /* XXX VARIABLE LENGTH */
57 } StrategyEvaluationData;       /* VARIABLE LENGTH STRUCTURE */
58
59 typedef StrategyEvaluationData  *StrategyEvaluation;
60
61 /*
62  * StrategyTransformMapIsValid --
63  *      Returns true iff strategy transformation map is valid.
64  */
65 #define StrategyTransformMapIsValid(transform) PointerIsValid(transform)
66
67
68 #ifndef CorrectStrategies               /* XXX this should be removable */
69 #define AMStrategies(foo)       12
70 #else   /* !defined(CorrectStrategies) */
71 #define AMStrategies(foo)       (foo)
72 #endif  /* !defined(CorrectStrategies) */
73
74 typedef struct StrategyMapData {
75         ScanKeyData             entry[1];       /* VARIABLE LENGTH ARRAY */
76 } StrategyMapData;      /* VARIABLE LENGTH STRUCTURE */
77
78 typedef StrategyMapData *StrategyMap;
79
80 typedef struct IndexStrategyData {
81         StrategyMapData strategyMapData[1];     /* VARIABLE LENGTH ARRAY */
82 } IndexStrategyData;    /* VARIABLE LENGTH STRUCTURE */
83
84 typedef IndexStrategyData       *IndexStrategy;
85
86 #endif /*STRAT_H */