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 2017/01/06 20:52:47 UTC
[3/5] calcite git commit: [CALCITE-1543] Correlated scalar sub-query
with multiple aggregates gives AssertionError (Kurt Young)
[CALCITE-1543] Correlated scalar sub-query with multiple aggregates gives AssertionError (Kurt Young)
Add TPC-H test case (Julian Hyde)
Close apache/calcite#343
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/408285f0
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/408285f0
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/408285f0
Branch: refs/heads/master
Commit: 408285f08f0b8e0e019dc0c6fe02d8e05425f4a3
Parents: 8dd935e
Author: Kurt Young <yk...@gmail.com>
Authored: Wed Jan 4 11:57:50 2017 +0800
Committer: Julian Hyde <jh...@apache.org>
Committed: Fri Jan 6 10:45:52 2017 -0800
----------------------------------------------------------------------
.../apache/calcite/sql2rel/RelDecorrelator.java | 1 -
.../calcite/test/SqlToRelConverterTest.java | 13 ++++++++
.../calcite/test/SqlToRelConverterTest.xml | 32 ++++++++++++++++++++
.../apache/calcite/adapter/tpch/TpchTest.java | 18 +++++++++++
4 files changed, 63 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/408285f0/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java b/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java
index 41e262b..a526d2c 100644
--- a/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java
+++ b/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java
@@ -451,7 +451,6 @@ public class RelDecorrelator implements ReflectiveVisitor {
// If input has not been rewritten, do not rewrite this rel.
return null;
}
- assert !frame.corVarOutputPos.isEmpty();
final RelNode newInput = frame.r;
// map from newInput
http://git-wip-us.apache.org/repos/asf/calcite/blob/408285f0/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
index 238113a..ef3840d 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
@@ -1742,6 +1742,19 @@ public class SqlToRelConverterTest extends SqlToRelTestBase {
sql(sql).decorrelate(true).expand(true).ok();
}
+ /** Test case for
+ * <a href="https://issues.apache.org/jira/browse/CALCITE-1543">[CALCITE-1543]
+ * Correlated scalar sub-query with multiple aggregates gives
+ * AssertionError</a>. */
+ @Test public void testCorrelationMultiScalarAggregate() {
+ final String sql = "select sum(e1.empno)\n"
+ + "from emp e1, dept d1\n"
+ + "where e1.deptno = d1.deptno\n"
+ + "and e1.sal > (select avg(e2.sal) from emp e2\n"
+ + " where e2.deptno = d1.deptno)";
+ sql(sql).decorrelate(true).expand(true).ok();
+ }
+
@Test public void testCorrelationScalarAggAndFilterRex() {
final String sql = "SELECT e1.empno\n"
+ "FROM emp e1, dept d1 where e1.deptno = d1.deptno\n"
http://git-wip-us.apache.org/repos/asf/calcite/blob/408285f0/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
index 0b31805..cfbfa8f 100644
--- a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
@@ -2878,6 +2878,38 @@ LogicalProject(EMPNO=[$0])
]]>
</Resource>
</TestCase>
+ <TestCase name="testCorrelationMultiScalarAggregate">
+ <Resource name="sql">
+ <![CDATA[select sum(e1.empno)
+from emp e1, dept d1
+where e1.deptno = d1.deptno
+and e1.sal > (select avg(e2.sal) from emp e2
+ where e2.deptno = d1.deptno)]]>
+ </Resource>
+ <Resource name="plan">
+ <![CDATA[
+LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])
+ LogicalProject(EMPNO=[$0])
+ LogicalProject(EMPNO=[$0])
+ LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10], EXPR$0=[$12])
+ LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10], DEPTNO00=[CAST($11):INTEGER], EXPR$0=[CAST($12):INTEGER])
+ LogicalJoin(condition=[AND(=($9, $11), >($5, $12))], joinType=[inner])
+ LogicalJoin(condition=[=($7, $9)], joinType=[inner])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+ LogicalTableScan(table=[[CATALOG, SALES, DEPT]])
+ LogicalAggregate(group=[{0}], EXPR$0=[AVG($1)])
+ LogicalProject(DEPTNO0=[$1], SAL=[$0])
+ LogicalProject(SAL=[$5], DEPTNO0=[$9])
+ LogicalJoin(condition=[=($7, $9)], joinType=[inner])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+ LogicalAggregate(group=[{0}])
+ LogicalProject(DEPTNO0=[$9])
+ LogicalJoin(condition=[=($7, $9)], joinType=[inner])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+ LogicalTableScan(table=[[CATALOG, SALES, DEPT]])
+]]>
+ </Resource>
+ </TestCase>
<TestCase name="testCorrelationExistsAndFilter">
<Resource name="sql">
<![CDATA[SELECT e1.empno
http://git-wip-us.apache.org/repos/asf/calcite/blob/408285f0/plus/src/test/java/org/apache/calcite/adapter/tpch/TpchTest.java
----------------------------------------------------------------------
diff --git a/plus/src/test/java/org/apache/calcite/adapter/tpch/TpchTest.java b/plus/src/test/java/org/apache/calcite/adapter/tpch/TpchTest.java
index 0170520..7dee05d 100644
--- a/plus/src/test/java/org/apache/calcite/adapter/tpch/TpchTest.java
+++ b/plus/src/test/java/org/apache/calcite/adapter/tpch/TpchTest.java
@@ -779,6 +779,24 @@ public class TpchTest {
.returnsCount(1500000);
}
+ /** Test case for
+ * <a href="https://issues.apache.org/jira/browse/CALCITE-1543">[CALCITE-1543]
+ * Correlated scalar sub-query with multiple aggregates gives
+ * AssertionError</a>. */
+ @Ignore("planning succeeds, but gives OutOfMemoryError during execution")
+ @Test public void testDecorrelateScalarAggregate() {
+ final String sql = "select sum(l_extendedprice)\n"
+ + "from lineitem, part\n"
+ + "where\n"
+ + " p_partkey = l_partkey\n"
+ + " and l_quantity > (\n"
+ + " select avg(l_quantity)\n"
+ + " from lineitem\n"
+ + " where l_partkey = p_partkey\n"
+ + " )\n";
+ with().query(sql).runs();
+ }
+
@Test public void testCustomer() {
with()
.query("select * from tpch.customer")