[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";
