blob: 5cd23255efa7ac09ba8881fba1919af9f42e5a36 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  | 
/*-------------------------------------------------------------------------
 *
 * strat.h--
 *    index strategy type definitions
 *    (separated out from original istrat.h to avoid circular refs)
 *
 *
 * Copyright (c) 1994, Regents of the University of California
 *
 * $Id: strat.h,v 1.4 1996/11/04 07:45:27 scrappy Exp $
 *
 *-------------------------------------------------------------------------
 */
#ifndef STRAT_H
#define STRAT_H
#include <access/skey.h>
typedef uint16	StrategyNumber;
#define InvalidStrategy	0
typedef struct StrategyTransformMapData {
    StrategyNumber	strategy[1];	/* VARIABLE LENGTH ARRAY */
} StrategyTransformMapData;	/* VARIABLE LENGTH STRUCTURE */
typedef StrategyTransformMapData	*StrategyTransformMap;
typedef struct StrategyOperatorData {
    StrategyNumber	strategy;
    bits16		flags;		/* scan qualification flags h/skey.h */
} StrategyOperatorData;
typedef StrategyOperatorData	*StrategyOperator;
typedef struct StrategyTermData {	/* conjunctive term */
    uint16			degree;
    StrategyOperatorData	operatorData[1];	/* VARIABLE LENGTH */
} StrategyTermData;	/* VARIABLE LENGTH STRUCTURE */
typedef StrategyTermData	*StrategyTerm;
typedef struct StrategyExpressionData {	/* disjunctive normal form */
    StrategyTerm	term[1];	/* VARIABLE LENGTH ARRAY */
} StrategyExpressionData;	/* VARIABLE LENGTH STRUCTURE */
typedef StrategyExpressionData	*StrategyExpression;
typedef struct StrategyEvaluationData {
    StrategyNumber		maxStrategy;
    StrategyTransformMap	negateTransform;
    StrategyTransformMap	commuteTransform;
    StrategyTransformMap	negateCommuteTransform;
    StrategyExpression	expression[12];	/* XXX VARIABLE LENGTH */
} StrategyEvaluationData;	/* VARIABLE LENGTH STRUCTURE */
typedef StrategyEvaluationData	*StrategyEvaluation;
/*
 * StrategyTransformMapIsValid --
 *	Returns true iff strategy transformation map is valid.
 */
#define	StrategyTransformMapIsValid(transform) PointerIsValid(transform)
#ifndef	CorrectStrategies		/* XXX this should be removable */
#define AMStrategies(foo)	12
#else	/* !defined(CorrectStrategies) */
#define AMStrategies(foo)	(foo)
#endif	/* !defined(CorrectStrategies) */
typedef struct StrategyMapData {
	ScanKeyData		entry[1];	/* VARIABLE LENGTH ARRAY */
} StrategyMapData;	/* VARIABLE LENGTH STRUCTURE */
typedef StrategyMapData	*StrategyMap;
typedef struct IndexStrategyData {
	StrategyMapData	strategyMapData[1];	/* VARIABLE LENGTH ARRAY */
} IndexStrategyData;	/* VARIABLE LENGTH STRUCTURE */
typedef IndexStrategyData	*IndexStrategy;
#endif /*STRAT_H */
  |