OSDN Git Service

Massive commit to run PGINDENT on all *.c and *.h files.
[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.5 1997/09/07 04:56:14 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                                                                                                  * STRUCTURE */
29
30 typedef StrategyTransformMapData *StrategyTransformMap;
31
32 typedef struct StrategyOperatorData
33 {
34         StrategyNumber  strategy;
35         bits16                  flags;          /* scan qualification flags h/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 */
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         StrategyTransformMap negateTransform;
59         StrategyTransformMap commuteTransform;
60         StrategyTransformMap negateCommuteTransform;
61         StrategyExpression expression[12];      /* XXX VARIABLE LENGTH */
62 }                               StrategyEvaluationData; /* VARIABLE LENGTH STRUCTURE */
63
64 typedef StrategyEvaluationData *StrategyEvaluation;
65
66 /*
67  * StrategyTransformMapIsValid --
68  *              Returns true iff strategy transformation map is valid.
69  */
70 #define StrategyTransformMapIsValid(transform) PointerIsValid(transform)
71
72
73 #ifndef CorrectStrategies               /* XXX this should be removable */
74 #define AMStrategies(foo)               12
75 #else                                                   /* !defined(CorrectStrategies) */
76 #define AMStrategies(foo)               (foo)
77 #endif                                                  /* !defined(CorrectStrategies) */
78
79 typedef struct StrategyMapData
80 {
81         ScanKeyData             entry[1];       /* VARIABLE LENGTH ARRAY */
82 }                               StrategyMapData;/* VARIABLE LENGTH STRUCTURE */
83
84 typedef StrategyMapData *StrategyMap;
85
86 typedef struct IndexStrategyData
87 {
88         StrategyMapData strategyMapData[1]; /* VARIABLE LENGTH ARRAY */
89 }                               IndexStrategyData;              /* VARIABLE LENGTH STRUCTURE */
90
91 typedef IndexStrategyData *IndexStrategy;
92
93 #endif                                                  /* STRAT_H */