This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch site
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/site by this push:
new 0bad582fb [CALCITE-4936] Generalize
FilterCalcMergeRule/ProjectCalcMergeRule to accept any Filter/Project/Calc
operator
0bad582fb is described below
commit 0bad582fb1ca038bf66a5233c2325cdc0003c776
Author: maksim <[email protected]>
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}