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

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


The following commit(s) were added to refs/heads/main by this push:
     new dd53e29326 [CALCITE-6227] ELEMENT(NULL) causes an assertion failure
dd53e29326 is described below

commit dd53e29326eb4399c5f767b22ae0ebc29a2e1c14
Author: Mihai Budiu <[email protected]>
AuthorDate: Thu Jan 25 17:16:07 2024 -0800

    [CALCITE-6227] ELEMENT(NULL) causes an assertion failure
    
    Signed-off-by: Mihai Budiu <[email protected]>
---
 core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java  | 8 ++++----
 core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java | 4 ++++
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java 
b/core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java
index 48da8b88a6..5924f001d0 100644
--- a/core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java
+++ b/core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java
@@ -574,13 +574,13 @@ public abstract class ReturnTypes {
                 RelDataType type =
                     opBinding.getOperandType(index)
                         .getComponentType();
-                assert type != null;
+                if (type == null) {
+                  return 
opBinding.getTypeFactory().createSqlType(SqlTypeName.NULL);
+                }
                 return type;
               }
 
-              @Override public int size() {
-                return opBinding.getOperandCount();
-              }
+              @Override public int size() { return 
opBinding.getOperandCount(); }
             });
     RelDataType biggestElementType =
         LEAST_RESTRICTIVE.inferReturnType(newBinding);
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 df221d04cf..fff0fc26e2 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlValidatorTest.java
@@ -1934,6 +1934,10 @@ public class SqlValidatorTest extends 
SqlValidatorTestCase {
         .columnType("DOUBLE NOT NULL");
     expr("element(multiset[multiset[cast(null as tinyint)]])")
         .columnType("TINYINT MULTISET NOT NULL");
+    // Test case for <a 
href="https://issues.apache.org/jira/projects/CALCITE/issues/CALCITE-6227";>
+    // ELEMENT(NULL) causes an assertion failure</a>.
+    expr("element(null)")
+        .columnType("NULL");
   }
 
   @Test void testMemberOf() {

Reply via email to