[CALCITE-2474] SqlAdvisor: avoid NPE in lookupFromHints where FROM is empty


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

Branch: refs/heads/master
Commit: 14a98e93949d016bb4a4d105e42414410803c8e4
Parents: 1c913e1
Author: Vladimir Sitnikov <[email protected]>
Authored: Sun Aug 19 14:01:37 2018 +0300
Committer: Vladimir Sitnikov <[email protected]>
Committed: Wed Sep 5 15:24:24 2018 +0300

----------------------------------------------------------------------
 .../org/apache/calcite/sql/validate/SqlValidatorImpl.java     | 4 ++++
 .../test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java | 7 +++++++
 2 files changed, 11 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/14a98e93/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java 
b/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java
index d425b95..70b8d97 100644
--- a/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java
+++ b/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java
@@ -704,6 +704,10 @@ public class SqlValidatorImpl implements 
SqlValidatorWithHints {
       SqlValidatorScope scope,
       SqlParserPos pos,
       Collection<SqlMoniker> hintList) {
+    if (node == null) {
+      // This can happen in cases like "select * _suggest_", so from clause is 
absent
+      return;
+    }
     final SqlValidatorNamespace ns = getNamespace(node);
     if (ns.isWrapperFor(IdentifierNamespace.class)) {
       IdentifierNamespace idNs = ns.unwrap(IdentifierNamespace.class);

http://git-wip-us.apache.org/repos/asf/calcite/blob/14a98e93/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 c67926a..8734bcd 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
@@ -1339,6 +1339,13 @@ public class SqlAdvisorTest extends SqlValidatorTestCase 
{
         ImmutableMap.of("COLUMN(isOne)", "isOne"));
   }
 
+  @Test @WithLex(Lex.JAVA) public void testAdviceEmptyFrom() {
+    String sql;
+    sql = "select * from^";
+    assertComplete(sql, "KEYWORD(FROM)\n", "from",
+        ImmutableMap.of("KEYWORD(FROM)", "from"));
+  }
+
   @Test public void testInsert() throws Exception {
     String sql;
     sql = "insert into emp(empno, mgr) select ^ from dept a";

Reply via email to