This is an automated email from the ASF dual-hosted git repository.

rubenql pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/master by this push:
     new fc912eb  [CALCITE-4409] Improve exception when RelBuilder tries to 
create a field on a non-struct expression
fc912eb is described below

commit fc912eb19d9ebbaee843dc1e9d3b4175e757cb53
Author: rubenada <rube...@gmail.com>
AuthorDate: Thu Nov 19 16:04:18 2020 +0000

    [CALCITE-4409] Improve exception when RelBuilder tries to create a field on 
a non-struct expression
---
 .../java/org/apache/calcite/rel/type/RelDataTypeImpl.java |  4 ++++
 .../test/java/org/apache/calcite/test/RelBuilderTest.java | 15 +++++++++++++++
 2 files changed, 19 insertions(+)

diff --git 
a/core/src/main/java/org/apache/calcite/rel/type/RelDataTypeImpl.java 
b/core/src/main/java/org/apache/calcite/rel/type/RelDataTypeImpl.java
index 512b0e6..b7333c1 100644
--- a/core/src/main/java/org/apache/calcite/rel/type/RelDataTypeImpl.java
+++ b/core/src/main/java/org/apache/calcite/rel/type/RelDataTypeImpl.java
@@ -79,6 +79,10 @@ public abstract class RelDataTypeImpl
 
   @Override public RelDataTypeField getField(String fieldName, boolean 
caseSensitive,
       boolean elideRecord) {
+    if (fieldList == null) {
+      throw new IllegalStateException("Trying to access field " + fieldName
+          + " in a type with no fields: " + this);
+    }
     for (RelDataTypeField field : fieldList) {
       if (Util.matches(caseSensitive, field.getName(), fieldName)) {
         return field;
diff --git a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java 
b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
index 836a826..f1eaadb 100644
--- a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
@@ -2597,6 +2597,21 @@ public class RelBuilderTest {
     assertThat(ex.getMessage(), allOf(containsString("Expression"), 
containsString("not found")));
   }
 
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-4409";>[CALCITE-4409]
+   * Improve exception when RelBuilder tries to create a field on a non-struct 
expression</a>. */
+  @Test void testFieldOnNonStructExpression() {
+    final RelBuilder builder = RelBuilder.create(config().build());
+    IllegalStateException ex = assertThrows(IllegalStateException.class, () -> 
{
+      builder.scan("EMP")
+          .project(
+              builder.field(builder.field("EMPNO"), "abc"))
+          .build();
+    }, "Field should fail since we are trying access a field on expression 
with non-struct type");
+    assertThat(ex.getMessage(),
+        is("Trying to access field abc in a type with no fields: SMALLINT"));
+  }
+
   @Test void testMultiLevelAlias() {
     final RelBuilder builder = RelBuilder.create(config().build());
     RelNode root =

Reply via email to