This is an automated email from the ASF dual-hosted git repository.
rubenql 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 9710ccf28c [CALCITE-7135] SqlToRelConverter throws AssertionError on
ARRAY subquery order by a field that is not present on the final projection
9710ccf28c is described below
commit 9710ccf28cab2f210a5a3e836b55b47da519f085
Author: Ruben Quesada Lopez <[email protected]>
AuthorDate: Thu Aug 28 15:29:11 2025 +0100
[CALCITE-7135] SqlToRelConverter throws AssertionError on ARRAY subquery
order by a field that is not present on the final projection
---
.../apache/calcite/sql2rel/SqlToRelConverter.java | 2 +-
.../apache/calcite/test/SqlToRelConverterTest.java | 18 ++++++++
.../apache/calcite/test/SqlToRelConverterTest.xml | 48 ++++++++++++++++++++++
3 files changed, 67 insertions(+), 1 deletion(-)
diff --git
a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
index 2f1ce05a4c..6b0c67dc13 100644
--- a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
+++ b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
@@ -4657,7 +4657,7 @@ private RelNode convertMultisets(final List<SqlNode>
operands,
case ARRAY_QUERY_CONSTRUCTOR:
case MAP_QUERY_CONSTRUCTOR:
final RelRoot root = convertQuery(call.operand(0), false, true);
- input = root.rel;
+ input = root.project();
break;
default:
lastList.add(operand);
diff --git
a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
index c53bf459fb..8f020b6f78 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
@@ -4344,6 +4344,24 @@ void checkCorrelatedMapSubQuery(boolean expand) {
sql(sql).ok();
}
+ @Test void testArraySubquery() {
+ final String sql = "SELECT ARRAY(SELECT empno FROM emp)";
+ sql(sql).ok();
+ }
+
+ @Test void testArraySubqueryOrderByProjectedField() {
+ final String sql = "SELECT ARRAY(SELECT empno FROM emp ORDER BY empno)";
+ sql(sql).ok();
+ }
+
+ /** Test case for <a
href="https://issues.apache.org/jira/browse/CALCITE-7135">[CALCITE-7135]
+ * SqlToRelConverter throws AssertionError on ARRAY subquery order by a
field that
+ * is not present on the final projection</a>. */
+ @Test void testArraySubqueryOrderByNonProjectedField() {
+ final String sql = "SELECT ARRAY(SELECT empno FROM emp ORDER BY ename)";
+ sql(sql).ok();
+ }
+
/**
* Test case for
* <a
href="https://issues.apache.org/jira/browse/CALCITE-3003">[CALCITE-3003]
diff --git
a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
index 07292374bc..d46d1931bb 100644
--- a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
@@ -521,6 +521,54 @@ LogicalProject(EXPR$0=[ROW(ITEM(ITEM(ITEM(ITEM($3, 0),
'detail'), 'skills'), 0).
<![CDATA[
LogicalProject(EXPR$0=[ITEM(ITEM($3, 1).DETAIL.SKILLS, +(2, 3)).DESC])
LogicalTableScan(table=[[CATALOG, SALES, DEPT_NESTED]])
+]]>
+ </Resource>
+ </TestCase>
+ <TestCase name="testArraySubquery">
+ <Resource name="sql">
+ <![CDATA[SELECT ARRAY(SELECT empno FROM emp)]]>
+ </Resource>
+ <Resource name="plan">
+ <![CDATA[
+LogicalProject(EXPR$0=[$1])
+ LogicalJoin(condition=[true], joinType=[inner])
+ LogicalValues(tuples=[[{ 0 }]])
+ Collect(field=[EXPR$0])
+ LogicalProject(EMPNO=[$0])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+]]>
+ </Resource>
+ </TestCase>
+ <TestCase name="testArraySubqueryOrderByNonProjectedField">
+ <Resource name="sql">
+ <![CDATA[SELECT ARRAY(SELECT empno FROM emp ORDER BY ename)]]>
+ </Resource>
+ <Resource name="plan">
+ <![CDATA[
+LogicalProject(EXPR$0=[$1])
+ LogicalJoin(condition=[true], joinType=[inner])
+ LogicalValues(tuples=[[{ 0 }]])
+ Collect(field=[EXPR$0])
+ LogicalProject(EMPNO=[$0])
+ LogicalSort(sort0=[$1], dir0=[ASC])
+ LogicalProject(EMPNO=[$0], ENAME=[$1])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+]]>
+ </Resource>
+ </TestCase>
+ <TestCase name="testArraySubqueryOrderByProjectedField">
+ <Resource name="sql">
+ <![CDATA[SELECT ARRAY(SELECT empno FROM emp ORDER BY empno)]]>
+ </Resource>
+ <Resource name="plan">
+ <![CDATA[
+LogicalProject(EXPR$0=[$1])
+ LogicalJoin(condition=[true], joinType=[inner])
+ LogicalValues(tuples=[[{ 0 }]])
+ Collect(field=[EXPR$0])
+ LogicalSort(sort0=[$0], dir0=[ASC])
+ LogicalProject(EMPNO=[$0])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
]]>
</Resource>
</TestCase>