[CALCITE-6227] ELEMENT(NULL) causes an assertion failure
Signed-off-by: Mihai Budiu <mbudiu@feldera.com>
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 48da8b8..5924f00 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 @@
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 df221d0..fff0fc2 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 @@
.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() {