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}

Reply via email to