You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2016/03/01 00:52:42 UTC
calcite git commit: [CALCITE-1109] Fix up condition when pushing
Filter through Aggregate (Amogh Margoor)
Repository: calcite
Updated Branches:
refs/heads/master 25d1e42a7 -> 8c90d8621
[CALCITE-1109] Fix up condition when pushing Filter through Aggregate (Amogh Margoor)
Close apache/calcite#201
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/8c90d862
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/8c90d862
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/8c90d862
Branch: refs/heads/master
Commit: 8c90d862179f43ab8855f4ff50cbc1d5968b21a2
Parents: 25d1e42
Author: Amogh Margoor <am...@qubole.com>
Authored: Sun Feb 28 06:01:45 2016 -0500
Committer: Julian Hyde <jh...@apache.org>
Committed: Mon Feb 29 15:52:19 2016 -0800
----------------------------------------------------------------------
.../rel/rules/FilterAggregateTransposeRule.java | 5 +++++
.../apache/calcite/test/RelOptRulesTest.java | 18 ++++++++++++++++
.../org/apache/calcite/test/RelOptRulesTest.xml | 22 ++++++++++++++++++++
3 files changed, 45 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/8c90d862/core/src/main/java/org/apache/calcite/rel/rules/FilterAggregateTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterAggregateTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterAggregateTransposeRule.java
index efdb06e..6347cbf 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/FilterAggregateTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterAggregateTransposeRule.java
@@ -91,6 +91,11 @@ public class FilterAggregateTransposeRule extends RelOptRule {
final List<RelDataTypeField> origFields =
aggRel.getRowType().getFieldList();
final int[] adjustments = new int[origFields.size()];
+ int j = 0;
+ for (int i : aggRel.getGroupSet()) {
+ adjustments[j] = i - j;
+ j++;
+ }
final List<RexNode> pushedConditions = Lists.newArrayList();
final List<RexNode> remainingConditions = Lists.newArrayList();
http://git-wip-us.apache.org/repos/asf/calcite/blob/8c90d862/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
index 0e0e5a0..7bd85cb 100644
--- a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
@@ -328,6 +328,24 @@ public class RelOptRulesTest extends RelOptTestBase {
}
/** Test case for
+ * <a href="https://issues.apache.org/jira/browse/CALCITE-1109">[CALCITE-1109]
+ * FilterAggregateTransposeRule pushes down incorrect condition</a>. */
+ @Test public void testPushFilterPastAggFour() {
+ final HepProgram preProgram =
+ HepProgram.builder()
+ .addRuleInstance(AggregateProjectMergeRule.INSTANCE)
+ .addRuleInstance(AggregateFilterTransposeRule.INSTANCE)
+ .build();
+ final HepProgram program =
+ HepProgram.builder()
+ .addRuleInstance(FilterAggregateTransposeRule.INSTANCE)
+ .build();
+ checkPlanning(tester, preProgram, new HepPlanner(program),
+ "select emp.deptno, count(*) from emp where emp.sal > '12' "
+ + "group by emp.deptno\n", false);
+ }
+
+ /** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-448">[CALCITE-448]
* FilterIntoJoinRule creates filters containing invalid RexInputRef</a>. */
@Test public void testPushFilterPastProject() {
http://git-wip-us.apache.org/repos/asf/calcite/blob/8c90d862/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
index 49ef891..c138c3f 100644
--- a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
@@ -2333,6 +2333,28 @@ UnionRel(all=[true])
]]>
</Resource>
</TestCase>
+ <TestCase name="testPushFilterPastAggFour">
+ <Resource name="sql">
+ <![CDATA[select emp.deptno, count(*) from emp where emp.sal > '12' group by emp.deptno
+]]>
+ </Resource>
+ <Resource name="planBefore">
+ <![CDATA[
+LogicalAggregate(group=[{1}], EXPR$1=[$SUM0($2)])
+ LogicalFilter(condition=[>(CAST($0):BIGINT NOT NULL, CAST('12'):BIGINT NOT NULL)])
+ LogicalAggregate(group=[{5, 7}], EXPR$1=[COUNT()])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+]]>
+ </Resource>
+ <Resource name="planAfter">
+ <![CDATA[
+LogicalAggregate(group=[{1}], EXPR$1=[$SUM0($2)])
+ LogicalAggregate(group=[{5, 7}], EXPR$1=[COUNT()])
+ LogicalFilter(condition=[>(CAST($5):BIGINT NOT NULL, CAST('12'):BIGINT NOT NULL)])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+]]>
+ </Resource>
+ </TestCase>
<TestCase name="testTransitiveInferenceJoin">
<Resource name="sql">
<![CDATA[select 1 from sales.emp d inner join sales.emp e on d.deptno = e.deptno where e.deptno > 7]]>