This is an automated email from the ASF dual-hosted git repository.
jcamacho pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/master by this push:
new de3bef9 [CALCITE-3982] Simplify FilterMergeRule to rely on RelBuilder
instead of RexProgram
de3bef9 is described below
commit de3bef9b06502886f87b60ab36d8e54ebc55f05c
Author: Jesus Camacho Rodriguez <[email protected]>
AuthorDate: Sat May 9 18:27:43 2020 -0700
[CALCITE-3982] Simplify FilterMergeRule to rely on RelBuilder instead of
RexProgram
Close apache/calcite#1968
---
.../apache/calcite/rel/rules/FilterMergeRule.java | 38 +---------------------
1 file changed, 1 insertion(+), 37 deletions(-)
diff --git
a/core/src/main/java/org/apache/calcite/rel/rules/FilterMergeRule.java
b/core/src/main/java/org/apache/calcite/rel/rules/FilterMergeRule.java
index a4df314..1517d2c 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/FilterMergeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterMergeRule.java
@@ -22,10 +22,6 @@ import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.SubstitutionRule;
import org.apache.calcite.rel.core.Filter;
import org.apache.calcite.rel.core.RelFactories;
-import org.apache.calcite.rex.RexBuilder;
-import org.apache.calcite.rex.RexNode;
-import org.apache.calcite.rex.RexProgram;
-import org.apache.calcite.rex.RexProgramBuilder;
import org.apache.calcite.tools.RelBuilder;
import org.apache.calcite.tools.RelBuilderFactory;
@@ -60,43 +56,11 @@ public class FilterMergeRule extends RelOptRule implements
SubstitutionRule {
final Filter topFilter = call.rel(0);
final Filter bottomFilter = call.rel(1);
- // use RexPrograms to merge the two FilterRels into a single program
- // so we can convert the two LogicalFilter conditions to directly
- // reference the bottom LogicalFilter's child
- RexBuilder rexBuilder = topFilter.getCluster().getRexBuilder();
- RexProgram bottomProgram = createProgram(bottomFilter);
- RexProgram topProgram = createProgram(topFilter);
-
- RexProgram mergedProgram =
- RexProgramBuilder.mergePrograms(
- topProgram,
- bottomProgram,
- rexBuilder);
-
- RexNode newCondition =
- mergedProgram.expandLocalRef(
- mergedProgram.getCondition());
-
final RelBuilder relBuilder = call.builder();
relBuilder.push(bottomFilter.getInput())
- .filter(newCondition);
+ .filter(bottomFilter.getCondition(), topFilter.getCondition());
call.transformTo(relBuilder.build());
}
- /**
- * Creates a RexProgram corresponding to a LogicalFilter
- *
- * @param filterRel the LogicalFilter
- * @return created RexProgram
- */
- private RexProgram createProgram(Filter filterRel) {
- RexProgramBuilder programBuilder =
- new RexProgramBuilder(
- filterRel.getRowType(),
- filterRel.getCluster().getRexBuilder());
- programBuilder.addIdentity();
- programBuilder.addCondition(filterRel.getCondition());
- return programBuilder.getProgram();
- }
}