home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre4.z / postgre4 / src / lib / H / access / isop.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  3.5 KB  |  143 lines

  1. /*
  2.  * isop.h --
  3.  *    POSTGRES index strategy manipulation operator definitions.
  4.  *
  5.  * Identification:
  6.  *    $Header: /private/postgres/src/lib/H/access/RCS/isop.h,v 1.8 1991/11/08 15:43:10 kemnitz Exp $
  7.  */
  8.  
  9. #ifndef    ISOpIncluded    /* Include this file only once */
  10. #define ISOpIncluded    1
  11.  
  12. #include "tmp/c.h"
  13. #include "access/istrat.h"
  14.  
  15. typedef struct StrategyTransformMapData {
  16.     StrategyNumber    strategy[1];    /* VARIABLE LENGTH ARRAY */
  17. } StrategyTransformMapData;    /* VARIABLE LENGTH STRUCTURE */
  18.  
  19. typedef StrategyTransformMapData    *StrategyTransformMap;
  20.  
  21. typedef struct StrategyOperatorData {
  22.     StrategyNumber    strategy;
  23.     bits16        flags;        /* scan qualification flags h/skey.h */
  24. } StrategyOperatorData;
  25.  
  26. typedef StrategyOperatorData    *StrategyOperator;
  27.  
  28. typedef struct StrategyTermData {    /* conjunctive term */
  29.     uint16            degree;
  30.     StrategyOperatorData    operatorData[1];    /* VARIABLE LENGTH */
  31. } StrategyTermData;    /* VARIABLE LENGTH STRUCTURE */
  32.  
  33. typedef StrategyTermData    *StrategyTerm;
  34.  
  35. typedef struct StrategyExpressionData {    /* disjunctive normal form */
  36.     StrategyTerm    term[1];    /* VARIABLE LENGTH ARRAY */
  37. } StrategyExpressionData;    /* VARIABLE LENGTH STRUCTURE */
  38.  
  39. typedef StrategyExpressionData    *StrategyExpression;
  40.  
  41. typedef struct StrategyEvaluationData {
  42.     StrategyNumber        maxStrategy;
  43.     StrategyTransformMap    negateTransform;
  44.     StrategyTransformMap    commuteTransform;
  45.     StrategyTransformMap    negateCommuteTransform;
  46.     StrategyExpression    expression[12];    /* XXX VARIABLE LENGTH */
  47. } StrategyEvaluationData;    /* VARIABLE LENGTH STRUCTURE */
  48.  
  49. typedef StrategyEvaluationData    *StrategyEvaluation;
  50.  
  51. /*
  52.  * StrategyTransformMapIsValid --
  53.  *    Returns true iff strategy transformation map is valid.
  54.  */
  55. #define    StrategyTransformMapIsValid(transform) PointerIsValid(transform)
  56.  
  57. /*
  58.  * StrategyOperatorIsValid --
  59.  *    Returns true iff strategy operator is valid.
  60.  */
  61. extern
  62. bool
  63. StrategyOperatorMapIsValid ARGS((
  64.     StrategyOperator    operator,
  65.     StrategyNumber        maxStrategy
  66. ));
  67.  
  68. /*
  69.  * StrategyTermIsValid --
  70.  *    Returns true iff strategy term is valid.
  71.  */
  72. extern
  73. bool
  74. StrategyTermIsValid ARGS((
  75.     StrategyTerm    term,
  76.     StrategyNumber    maxStrategy
  77. ));
  78.  
  79. /*
  80.  * StrategyExpressionIsValid --
  81.  *    Returns true iff strategy expression is valid.
  82.  */
  83. extern
  84. bool
  85. StrategyExpressionIsValid ARGS((
  86.     StrategyExpression    expression,
  87.     StrategyNumber        maxStrategy
  88. ));
  89.  
  90. /*
  91.  * StrategyEvaluationIsValid --
  92.  *    Returns true iff strategy evaluation information is valid.
  93.  */
  94. extern
  95. bool
  96. StrategyEvaluationIsValid ARGS((
  97.     StrategyEvaluation    evaluation
  98. ));
  99.  
  100. /*
  101.  * RelationGetStrategy --
  102.  *    Returns the strategy for an index relation and registered procedure.
  103.  *    Returns InvalidStrategyNumber if registered procedure is unknown.
  104.  *
  105.  * Note:
  106.  *    Assumes relation is valid index relation.
  107.  *    Assumes attribute number is in valid range.
  108.  *    Assumes maximum strategy is valid.
  109.  *    Assumes strategy transformation maps are valid.
  110.  *    Assumes registered procedure is valid.
  111.  */
  112. extern
  113. StrategyNumber
  114. RelationGetStrategy ARGS((
  115.     Relation        relation,
  116.     AttributeNumber        attributeNumber,
  117.     StrategyEvaluation    evaluation,
  118.     RegProcedure        procedure
  119. ));
  120.  
  121. /*
  122.  * RelationInvokeStrategy --
  123.  *    Returns the result of evaluating a strategy for an index relation.
  124.  *
  125.  * Note:
  126.  *    Assumes relation is a valid index relation.
  127.  *    Assumes strategy evalution information is valid.
  128.  *    Assumes attribute number is in valid range.
  129.  *    Assumes strategy is valid.
  130.  */
  131. extern
  132. bool        /* XXX someday, this may return Datum */
  133. RelationInvokeStrategy ARGS((
  134.     Relation        relation,
  135.     StrategyEvaluation    evaluation,
  136.     AttributeNumber        attributeNumber,
  137.     StrategyNumber        strategy,
  138.     Datum            left,
  139.     Datum            right
  140. ));
  141.  
  142. #endif    /* !defined(ISOpIncluded) */
  143.