This is an automated email from the ASF dual-hosted git repository. zabetak 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 ef2cc1df2 [CALCITE-4936] Generalize FilterCalcMergeRule/ProjectCalcMergeRule to accept any Filter/Project/Calc operator ef2cc1df2 is described below commit ef2cc1df21a73ad0268ccb869c976b11eff319b4 Author: maksim <mgra...@querifylabs.com> AuthorDate: Tue Dec 14 16:21:33 2021 +0300 [CALCITE-4936] Generalize FilterCalcMergeRule/ProjectCalcMergeRule to accept any Filter/Project/Calc operator Close apache/calcite#2646 --- .../apache/calcite/rel/rules/CalcMergeRule.java | 10 +++++----- .../calcite/rel/rules/FilterCalcMergeRule.java | 15 +++++++------- .../calcite/rel/rules/ProjectCalcMergeRule.java | 20 ++++++++----------- site/_docs/history.md | 23 ++++++++++++++++++++++ 4 files changed, 43 insertions(+), 25 deletions(-) diff --git a/core/src/main/java/org/apache/calcite/rel/rules/CalcMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/CalcMergeRule.java index bac42791b..3776873e3 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/CalcMergeRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/CalcMergeRule.java @@ -28,13 +28,13 @@ import org.immutables.value.Value; /** * Planner rule that merges a - * {@link org.apache.calcite.rel.logical.LogicalCalc} onto a - * {@link org.apache.calcite.rel.logical.LogicalCalc}. + * {@link org.apache.calcite.rel.core.Calc} onto a + * {@link org.apache.calcite.rel.core.Calc}. * - * <p>The resulting {@link org.apache.calcite.rel.logical.LogicalCalc} has the + * <p>The resulting {@link org.apache.calcite.rel.core.Calc} has the * same project list as the upper - * {@link org.apache.calcite.rel.logical.LogicalCalc}, but expressed in terms of - * the lower {@link org.apache.calcite.rel.logical.LogicalCalc}'s inputs. + * {@link org.apache.calcite.rel.core.Calc}, but expressed in terms of + * the lower {@link org.apache.calcite.rel.core.Calc}'s inputs. * * @see CoreRules#CALC_MERGE */ diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterCalcMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterCalcMergeRule.java index 7a9db73f7..d932e3e7b 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/FilterCalcMergeRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterCalcMergeRule.java @@ -21,7 +21,6 @@ import org.apache.calcite.plan.RelRule; import org.apache.calcite.rel.core.Calc; import org.apache.calcite.rel.core.Filter; import org.apache.calcite.rel.logical.LogicalCalc; -import org.apache.calcite.rel.logical.LogicalFilter; import org.apache.calcite.rex.RexBuilder; import org.apache.calcite.rex.RexProgram; import org.apache.calcite.rex.RexProgramBuilder; @@ -31,9 +30,9 @@ import org.immutables.value.Value; /** * Planner rule that merges a - * {@link org.apache.calcite.rel.logical.LogicalFilter} and a - * {@link org.apache.calcite.rel.logical.LogicalCalc}. The - * result is a {@link org.apache.calcite.rel.logical.LogicalCalc} + * {@link org.apache.calcite.rel.core.Filter} and a + * {@link org.apache.calcite.rel.core.Calc}. The + * result is a {@link org.apache.calcite.rel.core.Calc} * whose filter condition is the logical AND of the two. * * @see FilterMergeRule @@ -60,8 +59,8 @@ public class FilterCalcMergeRule //~ Methods ---------------------------------------------------------------- @Override public void onMatch(RelOptRuleCall call) { - final LogicalFilter filter = call.rel(0); - final LogicalCalc calc = call.rel(1); + final Filter filter = call.rel(0); + final Calc calc = call.rel(1); // Don't merge a filter onto a calc which contains windowed aggregates. // That would effectively be pushing a multiset down through a filter. @@ -87,8 +86,8 @@ public class FilterCalcMergeRule topProgram, bottomProgram, rexBuilder); - final LogicalCalc newCalc = - LogicalCalc.create(calc.getInput(), mergedProgram); + final Calc newCalc = + calc.copy(calc.getTraitSet(), calc.getInput(), mergedProgram); call.transformTo(newCalc); } diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectCalcMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectCalcMergeRule.java index 31106738e..e0b1640d5 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectCalcMergeRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectCalcMergeRule.java @@ -35,13 +35,13 @@ import org.immutables.value.Value; /** * Planner rule that merges a - * {@link org.apache.calcite.rel.logical.LogicalProject} and a - * {@link org.apache.calcite.rel.logical.LogicalCalc}. + * {@link org.apache.calcite.rel.core.Project} and a + * {@link org.apache.calcite.rel.core.Calc}. * - * <p>The resulting {@link org.apache.calcite.rel.logical.LogicalCalc} has the + * <p>The resulting {@link org.apache.calcite.rel.core.Calc} has the * same project list as the original - * {@link org.apache.calcite.rel.logical.LogicalProject}, but expressed in terms - * of the original {@link org.apache.calcite.rel.logical.LogicalCalc}'s inputs. + * {@link org.apache.calcite.rel.core.Project}, but expressed in terms + * of the original {@link org.apache.calcite.rel.core.Calc}'s inputs. * * @see FilterCalcMergeRule * @see CoreRules#PROJECT_CALC_MERGE @@ -70,9 +70,7 @@ public class ProjectCalcMergeRule // Don't merge a project which contains windowed aggregates onto a // calc. That would effectively be pushing a windowed aggregate down - // through a filter. Transform the project into an identical calc, - // which we'll have chance to merge later, after the over is - // expanded. + // through a filter. final RelOptCluster cluster = project.getCluster(); RexProgram program = RexProgram.create( @@ -82,8 +80,6 @@ public class ProjectCalcMergeRule project.getRowType(), cluster.getRexBuilder()); if (RexOver.containsOver(program)) { - LogicalCalc projectAsCalc = LogicalCalc.create(calc, program); - call.transformTo(projectAsCalc); return; } @@ -105,8 +101,8 @@ public class ProjectCalcMergeRule topProgram, bottomProgram, rexBuilder); - final LogicalCalc newCalc = - LogicalCalc.create(calc.getInput(), mergedProgram); + final Calc newCalc = + calc.copy(calc.getTraitSet(), calc.getInput(), mergedProgram); call.transformTo(newCalc); } diff --git a/site/_docs/history.md b/site/_docs/history.md index 4f06e5107..8b9261e6e 100644 --- a/site/_docs/history.md +++ b/site/_docs/history.md @@ -28,6 +28,29 @@ For a full list of releases, see Downloads are available on the [downloads page]({{ site.baseurl }}/downloads/). +## <a href="https://github.com/apache/calcite/releases/tag/calcite-1.31.0">1.31.0</a> / 2022-MM-DD +{: #v1-31-0} + +#### Breaking Changes +{: #breaking-1-31-0} + +* [<a href="https://issues.apache.org/jira/browse/CALCITE-4936">CALCITE-4936</a>] + Generalize `FilterCalcMergeRule`/`ProjectCalcMergeRule` to accept any `Filter`/`Project`/`Calc` operator + +#### New features +{: #new-features-1-31-0} + +#### Bug-fixes, API changes and minor enhancements +{: #fixes-1-31-0} + +#### Build and test suite +{: #build-1-31-0} + +#### Dependency version upgrade +{: #dependency-1-31-0} + +#### Web site and documentation +{: #site-1-31-0} ## <a href="https://github.com/apache/calcite/releases/tag/calcite-1.30.0">1.30.0</a> / 2022-03-20 {: #v1-30-0}