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 df31d6f2e7 [CALCITE-7347] UNKNOWN type inferred for array element type
df31d6f2e7 is described below

commit df31d6f2e7a7f8111032ddd85c2fbce1e136b627
Author: Mihai Budiu <[email protected]>
AuthorDate: Tue Feb 17 20:38:53 2026 -0800

    [CALCITE-7347] UNKNOWN type inferred for array element type
    
    Signed-off-by: Mihai Budiu <[email protected]>
---
 babel/src/test/resources/sql/spark.iq                   | 17 +++++++++++++++++
 .../org/apache/calcite/sql/type/SqlTypeFactoryImpl.java |  2 +-
 .../java/org/apache/calcite/test/SqlOperatorTest.java   |  2 +-
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/babel/src/test/resources/sql/spark.iq 
b/babel/src/test/resources/sql/spark.iq
index 5f0927961f..474775474a 100644
--- a/babel/src/test/resources/sql/spark.iq
+++ b/babel/src/test/resources/sql/spark.iq
@@ -29,6 +29,23 @@
 #
 # Returns BOOLEAN
 
+# Test case for [CALCITE-7347] 
https://issues.apache.org/jira/browse/CALCITE-7347
+# UNKNOWN type inferred for array element type
+SELECT DISTINCT t.f1, t.f2, CAST(t.f3 AS VARCHAR ARRAY) AS f3, t.f4
+FROM (VALUES
+   ('a', 1, ARRAY['by'], true),
+   ('b', 1, ARRAY(), false)
+) AS t (f1, f2, f3, f4);
+EnumerableCalc(expr#0..2=[{inputs}], expr#3=[1], F1=[$t0], F2=[$t3], F3=[$t1], 
F4=[$t2])
+  EnumerableAggregate(group=[{0, 1, 2}])
+    EnumerableCalc(expr#0..2=[{inputs}], expr#3=[CAST($t1):VARCHAR NOT NULL 
ARRAY NOT NULL], F1=[$t0], F3=[$t3], F4=[$t2])
+      EnumerableUnion(all=[true])
+        EnumerableCalc(expr#0=[{inputs}], expr#1=['a'], expr#2=['by'], 
expr#3=[ARRAY($t2)], expr#4=[true], EXPR$0=[$t1], EXPR$2=[$t3], EXPR$3=[$t4])
+          EnumerableValues(tuples=[[{ 0 }]])
+        EnumerableCalc(expr#0=[{inputs}], expr#1=['b'], expr#2=[ARRAY()], 
expr#3=[CAST($t2):CHAR(2) NOT NULL ARRAY NOT NULL], expr#4=[false], 
EXPR$0=[$t1], EXPR$2=[$t3], EXPR$3=[$t4])
+          EnumerableValues(tuples=[[{ 0 }]])
+!plan
+
 select NULL RLIKE 'abc*';
 EXPR$0
 null
diff --git 
a/core/src/main/java/org/apache/calcite/sql/type/SqlTypeFactoryImpl.java 
b/core/src/main/java/org/apache/calcite/sql/type/SqlTypeFactoryImpl.java
index 3dde2b4309..115b66fa21 100644
--- a/core/src/main/java/org/apache/calcite/sql/type/SqlTypeFactoryImpl.java
+++ b/core/src/main/java/org/apache/calcite/sql/type/SqlTypeFactoryImpl.java
@@ -327,7 +327,7 @@ private static void assertBasic(SqlTypeName typeName) {
       RelDataTypeFamily family = type.getFamily();
 
       final SqlTypeName typeName = type.getSqlTypeName();
-      if (typeName == SqlTypeName.NULL) {
+      if (typeName == SqlTypeName.NULL || typeName == SqlTypeName.UNKNOWN) {
         continue;
       }
 
diff --git a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java 
b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
index c7144c92fb..5fb37c5812 100644
--- a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
+++ b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
@@ -9172,7 +9172,7 @@ void checkArrayReverseFunc(SqlOperatorFixture f0, 
SqlFunction function,
     f1.checkScalar("map_concat(map(1, 2), map(1, null))", "{1=null}",
         "(INTEGER NOT NULL, INTEGER) MAP NOT NULL");
     f1.checkScalar("map_concat(map('foo', 1), map())", "{foo=1}",
-        "(UNKNOWN NOT NULL, UNKNOWN NOT NULL) MAP NOT NULL");
+        "(CHAR(3) NOT NULL, INTEGER NOT NULL) MAP NOT NULL");
 
     // test operand is null map
     f1.checkNull("map_concat(map('foo', 1), cast(null as map<varchar, int>))");

Reply via email to