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() {