|
22 | 22 | import lombok.Getter; |
23 | 23 | import org.apache.calcite.plan.Contexts; |
24 | 24 | import org.apache.calcite.plan.RelTraitDef; |
| 25 | +import org.apache.calcite.plan.hep.HepPlanner; |
| 26 | +import org.apache.calcite.plan.hep.HepProgram; |
| 27 | +import org.apache.calcite.plan.hep.HepProgramBuilder; |
25 | 28 | import org.apache.calcite.rel.RelNode; |
26 | 29 | import org.apache.calcite.rel.rel2sql.RelToSqlConverter; |
27 | 30 | import org.apache.calcite.rel.rel2sql.SqlImplementor; |
| 31 | +import org.apache.calcite.rel.rules.FilterMergeRule; |
28 | 32 | import org.apache.calcite.schema.SchemaPlus; |
29 | 33 | import org.apache.calcite.sql.SqlNode; |
30 | 34 | import org.apache.calcite.sql.parser.SqlParser; |
@@ -101,10 +105,19 @@ public RelNode getRelNode(String ppl) { |
101 | 105 | Query query = (Query) plan(pplParser, ppl); |
102 | 106 | planTransformer.analyze(query.getPlan(), context); |
103 | 107 | RelNode root = context.relBuilder.build(); |
| 108 | + root = mergeAdjacentFilters(root); |
104 | 109 | System.out.println(root.explain()); |
105 | 110 | return root; |
106 | 111 | } |
107 | 112 |
|
| 113 | + private RelNode mergeAdjacentFilters(RelNode relNode) { |
| 114 | + HepProgram program = |
| 115 | + new HepProgramBuilder().addRuleInstance(FilterMergeRule.Config.DEFAULT.toRule()).build(); |
| 116 | + HepPlanner planner = new HepPlanner(program); |
| 117 | + planner.setRoot(relNode); |
| 118 | + return planner.findBestExp(); |
| 119 | + } |
| 120 | + |
108 | 121 | private Node plan(PPLSyntaxParser parser, String query) { |
109 | 122 | final AstStatementBuilder builder = |
110 | 123 | new AstStatementBuilder( |
|
0 commit comments