[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 <[email protected]> Authored: Mon Jul 30 23:21:07 2018 +0300 Committer: Vladimir Sitnikov <[email protected]> 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\".^",
