[CALCITE-2477] SqlAdvisor: scalar sub-query support

Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/9f6c0672
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/9f6c0672
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/9f6c0672

Branch: refs/heads/master
Commit: 9f6c067256dde19d1b43b4ee978ce443e73797a4
Parents: 77b8c4d
Author: Vladimir Sitnikov <[email protected]>
Authored: Sun Aug 19 18:26:50 2018 +0300
Committer: Vladimir Sitnikov <[email protected]>
Committed: Wed Sep 5 15:24:24 2018 +0300

----------------------------------------------------------------------
 .../calcite/sql/advise/SqlSimpleParser.java     |  7 +++---
 .../apache/calcite/sql/test/SqlAdvisorTest.java | 25 ++++++++++++++++++++
 2 files changed, 28 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/9f6c0672/core/src/main/java/org/apache/calcite/sql/advise/SqlSimpleParser.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/calcite/sql/advise/SqlSimpleParser.java 
b/core/src/main/java/org/apache/calcite/sql/advise/SqlSimpleParser.java
index edc7c5f..b403753 100644
--- a/core/src/main/java/org/apache/calcite/sql/advise/SqlSimpleParser.java
+++ b/core/src/main/java/org/apache/calcite/sql/advise/SqlSimpleParser.java
@@ -202,13 +202,12 @@ public class SqlSimpleParser {
               iter.previous();
             }
           }
+          // Combine SELECT ... UNION SELECT..., so keep trying consumeSelect
           break;
-        case RPAREN:
-          iter.previous();
-          return;
         default:
+          // Unknown token detected => end of query detected
           iter.previous();
-          break;
+          return;
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/calcite/blob/9f6c0672/core/src/test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java 
b/core/src/test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java
index e2c6e73..e6a8ce8 100644
--- a/core/src/test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java
+++ b/core/src/test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java
@@ -30,6 +30,7 @@ import org.apache.calcite.test.WithLex;
 import com.google.common.collect.ImmutableMap;
 
 import org.junit.Assert;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.MethodRule;
@@ -667,6 +668,29 @@ public class SqlAdvisorTest extends SqlValidatorTestCase {
     assertSimplify(sql, "SELECT ax _suggest_ FROM ( SELECT * FROM dummy a )");
   }
 
+  @Test public void testSimlifySubqueryStar() {
+    String sql;
+    sql = "select ax^ from (select (select * from dummy) axc from dummy a)";
+    assertSimplify(sql,
+        "SELECT ax _suggest_ FROM ( SELECT ( SELECT * FROM dummy ) axc FROM 
dummy a )");
+    assertComplete(sql, "COLUMN(AXC)\n", "ax");
+
+    sql =
+        "select ax^ from (select a.x+0 axa, b.x axb, (select * from dummy) 
axbc from dummy a, dummy b)";
+    assertSimplify(sql,
+        "SELECT ax _suggest_ FROM ( SELECT a.x+0 axa , b.x axb , ( SELECT * 
FROM dummy ) axbc FROM dummy a , dummy b )");
+    assertComplete(sql,
+        "COLUMN(AXA)\nCOLUMN(AXB)\nCOLUMN(AXBC)\n", "ax");
+
+    sql = "select ^ from (select * from dummy)";
+    assertSimplify(sql, "SELECT _suggest_ FROM ( SELECT * FROM dummy )");
+
+    sql = "select ^ from (select x.* from dummy x)";
+    assertSimplify(sql, "SELECT _suggest_ FROM ( SELECT x.* FROM dummy x )");
+
+    sql = "select ^ from (select a.x + b.y from dummy a, dummy b)";
+    assertSimplify(sql, "SELECT _suggest_ FROM ( SELECT a.x + b.y FROM dummy a 
, dummy b )");
+  }
   @Test public void testSimlifyMinus() {
     String sql;
     sql = "select ^ from dummy a minus select * from dummy b";
@@ -1361,6 +1385,7 @@ public class SqlAdvisorTest extends SqlValidatorTestCase {
         ImmutableMap.of("KEYWORD(FROM)", "from"));
   }
 
+  @Ignore("Inserts are not supported by SimpleParser yet")
   @Test public void testInsert() throws Exception {
     String sql;
     sql = "insert into emp(empno, mgr) select ^ from dept a";

Reply via email to