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

hongze 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 eed664d  [CALCITE-2982] SqlItemOperator should throw understandable 
exception message for incorrect operand type (pengzhiwei)
eed664d is described below

commit eed664de8c45af1423d692af88cc98395adcb072
Author: pengzhiwei <[email protected]>
AuthorDate: Mon Apr 8 15:35:10 2019 +0800

    [CALCITE-2982] SqlItemOperator should throw understandable exception 
message for incorrect operand type (pengzhiwei)
    
    Close apache/calcite#1149
---
 .../src/main/java/org/apache/calcite/sql/fun/SqlItemOperator.java | 8 ++++----
 core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java  | 7 +++++++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/sql/fun/SqlItemOperator.java 
b/core/src/main/java/org/apache/calcite/sql/fun/SqlItemOperator.java
index b9f029f..1fcc1cf 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlItemOperator.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlItemOperator.java
@@ -87,13 +87,13 @@ class SqlItemOperator extends SqlSpecialOperator {
         throwOnFailure)) {
       return false;
     }
-    final RelDataType operandType = callBinding.getOperandType(0);
-    final SqlSingleOperandTypeChecker checker = getChecker(operandType);
+    final SqlSingleOperandTypeChecker checker = getChecker(callBinding);
     return checker.checkSingleOperandType(callBinding, right, 0,
         throwOnFailure);
   }
 
-  private SqlSingleOperandTypeChecker getChecker(RelDataType operandType) {
+  private SqlSingleOperandTypeChecker getChecker(SqlCallBinding callBinding) {
+    final RelDataType operandType = callBinding.getOperandType(0);
     switch (operandType.getSqlTypeName()) {
     case ARRAY:
       return OperandTypes.family(SqlTypeFamily.INTEGER);
@@ -106,7 +106,7 @@ class SqlItemOperator extends SqlSpecialOperator {
           OperandTypes.family(SqlTypeFamily.INTEGER),
           OperandTypes.family(SqlTypeFamily.CHARACTER));
     default:
-      throw new AssertionError(operandType.getSqlTypeName());
+      throw callBinding.newValidationSignatureError();
     }
   }
 
diff --git a/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java 
b/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
index a70664c..de5c333 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
@@ -8127,6 +8127,13 @@ public class SqlValidatorTest extends 
SqlValidatorTestCase {
         .type("RecordType(VARCHAR(10) OA) NOT NULL");
   }
 
+  @Test public void testItemOperatorException() {
+    sql("select ^name[0]^ from dept")
+        .fails("Cannot apply 'ITEM' to arguments of type 
'ITEM\\(<VARCHAR\\(10\\)>, "
+          +  "<INTEGER>\\)'\\. Supported form\\(s\\): <ARRAY>\\[<INTEGER>\\]\n"
+          + "<MAP>\\[<VALUE>\\].*");
+  }
+
   /** Test case for
    * <a href="https://issues.apache.org/jira/browse/CALCITE-497";>[CALCITE-497]
    * Support optional qualifier for column name references</a>. */

Reply via email to