This is an automated email from the ASF dual-hosted git repository.

jcamacho 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 2102f1f  [CALCITE-1726] Subquery in FILTER is left untransformed 
(Vineet Garg)
2102f1f is described below

commit 2102f1f5442fa271c258b7754da8df07d65847ec
Author: Vineet Garg <vg...@apache.org>
AuthorDate: Thu Feb 7 20:56:19 2019 -0800

    [CALCITE-1726] Subquery in FILTER is left untransformed (Vineet Garg)
    
    Close apache/calcite#1035
---
 .../java/org/apache/calcite/tools/Programs.java    |  9 ++--
 core/src/test/resources/sql/sub-query.iq           | 56 ++++++++++++++++++++++
 2 files changed, 61 insertions(+), 4 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/tools/Programs.java 
b/core/src/main/java/org/apache/calcite/tools/Programs.java
index b6337e2..38d6aa5 100644
--- a/core/src/main/java/org/apache/calcite/tools/Programs.java
+++ b/core/src/main/java/org/apache/calcite/tools/Programs.java
@@ -258,10 +258,11 @@ public class Programs {
   }
 
   public static Program subQuery(RelMetadataProvider metadataProvider) {
-    return hep(
-        ImmutableList.of((RelOptRule) SubQueryRemoveRule.FILTER,
-            SubQueryRemoveRule.PROJECT,
-            SubQueryRemoveRule.JOIN), true, metadataProvider);
+    final HepProgramBuilder builder = HepProgram.builder();
+    builder.addRuleCollection(ImmutableList.of((RelOptRule) 
SubQueryRemoveRule.FILTER,
+        SubQueryRemoveRule.PROJECT,
+        SubQueryRemoveRule.JOIN));
+    return of(builder.build(), true, metadataProvider);
   }
 
   public static Program getProgram() {
diff --git a/core/src/test/resources/sql/sub-query.iq 
b/core/src/test/resources/sql/sub-query.iq
index 4168eb0..9b8c179 100644
--- a/core/src/test/resources/sql/sub-query.iq
+++ b/core/src/test/resources/sql/sub-query.iq
@@ -1998,4 +1998,60 @@ from "scott".emp;
 
 !ok
 
+# Test nested subquery in PROJECT within FILTER
+select * from emp where deptno IN (select (select max(deptno) from "scott".emp 
t1) from "scott".emp t2);
+ EMPNO | ENAME  | JOB      | MGR  | HIREDATE   | SAL     | COMM    | DEPTNO
+-------+--------+----------+------+------------+---------+---------+--------
+  7499 | ALLEN  | SALESMAN | 7698 | 1981-02-20 | 1600.00 |  300.00 |     30
+  7521 | WARD   | SALESMAN | 7698 | 1981-02-22 | 1250.00 |  500.00 |     30
+  7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     30
+  7698 | BLAKE  | MANAGER  | 7839 | 1981-01-05 | 2850.00 |         |     30
+  7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 |    0.00 |     30
+  7900 | JAMES  | CLERK    | 7698 | 1981-12-03 |  950.00 |         |     30
+(6 rows)
+
+!ok
+EnumerableSemiJoin(condition=[=($7, $9)], joinType=[inner])
+  EnumerableTableScan(table=[[scott, EMP]])
+  EnumerableJoin(condition=[true], joinType=[left])
+    EnumerableCalc(expr#0..7=[{inputs}], EMPNO=[$t0])
+      EnumerableTableScan(table=[[scott, EMP]])
+    EnumerableAggregate(group=[{}], EXPR$0=[MAX($7)])
+      EnumerableTableScan(table=[[scott, EMP]])
+!plan
+
+# Test nested subquery in FILTER within PROJECT
+select (select max(deptno) from "scott".emp where deptno IN (select deptno 
from "scott".emp)) from emp ;
+ EXPR$0
+--------
+     30
+     30
+     30
+     30
+     30
+     30
+     30
+     30
+     30
+     30
+     30
+     30
+     30
+     30
+(14 rows)
+
+!ok
+EnumerableCalc(expr#0..1=[{inputs}], EXPR$0=[$t1])
+  EnumerableJoin(condition=[true], joinType=[left])
+    EnumerableCalc(expr#0..7=[{inputs}], EMPNO=[$t0])
+      EnumerableTableScan(table=[[scott, EMP]])
+    EnumerableAggregate(group=[{}], EXPR$0=[MAX($1)])
+      EnumerableSemiJoin(condition=[=($1, $9)], joinType=[inner])
+        EnumerableCalc(expr#0..7=[{inputs}], EMPNO=[$t0], DEPTNO=[$t7])
+          EnumerableTableScan(table=[[scott, EMP]])
+        EnumerableTableScan(table=[[scott, EMP]])
+!plan
+
+
+
 # End sub-query.iq

Reply via email to