You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by vl...@apache.org on 2018/07/30 21:03:16 UTC

[2/5] calcite git commit: [CALCITE-2429] NPE: SqlValidatorImpl.lookupFieldNamespace when SQL Advisor observes non-existing field

[CALCITE-2429] NPE: SqlValidatorImpl.lookupFieldNamespace when SQL Advisor observes non-existing field


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

Branch: refs/heads/master
Commit: a18a380095c9f0bb3da9912748a5b368e547134f
Parents: 6496cb7
Author: Vladimir Sitnikov <si...@gmail.com>
Authored: Mon Jul 30 23:21:07 2018 +0300
Committer: Vladimir Sitnikov <si...@gmail.com>
Committed: Tue Jul 31 00:00:34 2018 +0300

----------------------------------------------------------------------
 .../org/apache/calcite/sql/validate/SqlValidatorImpl.java    | 3 +++
 core/src/test/java/org/apache/calcite/test/JdbcTest.java     | 8 ++++++++
 2 files changed, 11 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/a18a3800/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 7edcd7b..3bb0cd4 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
@@ -4831,6 +4831,9 @@ public class SqlValidatorImpl implements SqlValidatorWithHints {
   SqlValidatorNamespace lookupFieldNamespace(RelDataType rowType, String name) {
     final SqlNameMatcher nameMatcher = catalogReader.nameMatcher();
     final RelDataTypeField field = nameMatcher.field(rowType, name);
+    if (field == null) {
+      return null;
+    }
     return new FieldNamespace(this, field.getType());
   }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/a18a3800/core/src/test/java/org/apache/calcite/test/JdbcTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/JdbcTest.java b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
index c1595b3..8261b8d 100644
--- a/core/src/test/java/org/apache/calcite/test/JdbcTest.java
+++ b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
@@ -413,6 +413,14 @@ public class JdbcTest {
             "id=empid; names=[empid]; type=COLUMN"));
   }
 
+  @Test public void testSqlAdvisorNonExistingColumn()
+      throws SQLException, ClassNotFoundException {
+    adviseSql("select e.empdid_wrong_name.^ from \"hr\".\"emps\" e",
+        CalciteAssert.checkResultUnordered(
+            "id=*; names=[*]; type=KEYWORD",
+            "id=; names=null; type=MATCH"));
+  }
+
   @Test public void testSqlAdvisorTableInSchema()
       throws SQLException, ClassNotFoundException {
     adviseSql("select * from \"hr\".^",