|
20 | 20 | namespace peloton {
|
21 | 21 | namespace optimizer {
|
22 | 22 |
|
| 23 | +using GroupExprTemplate = GroupExpression; |
| 24 | +using OptimizeContext = OptimizeContext; |
| 25 | + |
23 | 26 | /* Rules are applied from high to low priority */
|
24 | 27 | enum class RulePriority : int {
|
25 | 28 | HIGH = 3,
|
@@ -71,5 +74,49 @@ class TransitiveClosureConstantTransform: public Rule {
|
71 | 74 | OptimizeContext *context) const override;
|
72 | 75 | };
|
73 | 76 |
|
| 77 | +class AndShortCircuit: public Rule { |
| 78 | + public: |
| 79 | + AndShortCircuit(); |
| 80 | + |
| 81 | + int Promise(GroupExprTemplate *group_expr, OptimizeContext *context) const override; |
| 82 | + bool Check(std::shared_ptr<AbstractNodeExpression> plan, OptimizeContext *context) const override; |
| 83 | + void Transform(std::shared_ptr<AbstractNodeExpression> input, |
| 84 | + std::vector<std::shared_ptr<AbstractNodeExpression>> &transformed, |
| 85 | + OptimizeContext *context) const override; |
| 86 | +}; |
| 87 | + |
| 88 | +class OrShortCircuit: public Rule { |
| 89 | + public: |
| 90 | + OrShortCircuit(); |
| 91 | + |
| 92 | + int Promise(GroupExprTemplate *group_expr, OptimizeContext *context) const override; |
| 93 | + bool Check(std::shared_ptr<AbstractNodeExpression> plan, OptimizeContext *context) const override; |
| 94 | + void Transform(std::shared_ptr<AbstractNodeExpression> input, |
| 95 | + std::vector<std::shared_ptr<AbstractNodeExpression>> &transformed, |
| 96 | + OptimizeContext *context) const override; |
| 97 | +}; |
| 98 | + |
| 99 | +class NullLookupOnNotNullColumn: public Rule { |
| 100 | + public: |
| 101 | + NullLookupOnNotNullColumn(); |
| 102 | + |
| 103 | + int Promise(GroupExprTemplate *group_expr, OptimizeContext *context) const override; |
| 104 | + bool Check(std::shared_ptr<AbstractNodeExpression> plan, OptimizeContext *context) const override; |
| 105 | + void Transform(std::shared_ptr<AbstractNodeExpression> input, |
| 106 | + std::vector<std::shared_ptr<AbstractNodeExpression>> &transformed, |
| 107 | + OptimizeContext *context) const override; |
| 108 | +}; |
| 109 | + |
| 110 | +class NotNullLookupOnNotNullColumn: public Rule { |
| 111 | + public: |
| 112 | + NotNullLookupOnNotNullColumn(); |
| 113 | + |
| 114 | + int Promise(GroupExprTemplate *group_expr, OptimizeContext *context) const override; |
| 115 | + bool Check(std::shared_ptr<AbstractNodeExpression> plan, OptimizeContext *context) const override; |
| 116 | + void Transform(std::shared_ptr<AbstractNodeExpression> input, |
| 117 | + std::vector<std::shared_ptr<AbstractNodeExpression>> &transformed, |
| 118 | + OptimizeContext *context) const override; |
| 119 | +}; |
| 120 | + |
74 | 121 | } // namespace optimizer
|
75 | 122 | } // namespace peloton
|
0 commit comments