This is an automated email from the ASF dual-hosted git repository.
dmsysolyatin 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 79879f92ab [CALCITE-5468] SqlToRelConverter throws if ORDER BY
contains IN
79879f92ab is described below
commit 79879f92abc4f2279496a0e6ca9066d9d24a1457
Author: dssysolyatin <[email protected]>
AuthorDate: Mon Jan 9 12:46:48 2023 +0200
[CALCITE-5468] SqlToRelConverter throws if ORDER BY contains IN
---
.../apache/calcite/sql2rel/SqlToRelConverter.java | 2 ++
.../apache/calcite/test/SqlToRelConverterTest.java | 21 +++++++++++++
.../apache/calcite/test/SqlToRelConverterTest.xml | 36 ++++++++++++++++++++++
3 files changed, 59 insertions(+)
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 97e1dcfecf..0ca69f1750 100644
--- a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
+++ b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
@@ -4513,6 +4513,8 @@ public class SqlToRelConverter {
selectList = validator().expandStar(selectList, select, false);
replaceSubQueries(bb, selectList, RelOptUtil.Logic.TRUE_FALSE_UNKNOWN);
+ replaceSubQueries(bb, new SqlNodeList(orderList, SqlParserPos.ZERO),
+ RelOptUtil.Logic.TRUE_FALSE_UNKNOWN);
List<String> fieldNames = new ArrayList<>();
final List<RexNode> exprs = new ArrayList<>();
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 77b84f7b46..8035778490 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
@@ -838,6 +838,27 @@ class SqlToRelConverterTest extends SqlToRelTestBase {
sql(sql).ok();
}
+ /**
+ * Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-5468">[CALCITE-5468]
+ * SqlToRelConverter throws if ORDER BY contains IN</a>.
+ */
+ @Test void testOrderByWithIn() {
+ String sql = "SELECT empno\n"
+ + "FROM emp\n"
+ + "ORDER BY\n"
+ + "CASE WHEN empno IN (1,2) THEN 0 ELSE 1 END";
+ sql(sql).ok();
+ }
+
+ @Test void testOrderByWithSubQuery() {
+ String sql = "SELECT empno\n"
+ + "FROM emp\n"
+ + "ORDER BY\n"
+ + "(SELECT empno FROM emp LIMIT 1)";
+ sql(sql).ok();
+ }
+
@Test void testOrderUnion() {
final String sql = "select empno, sal from emp\n"
+ "union all\n"
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 b69a9a400c..4630dc4ba4 100644
--- a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
@@ -5345,6 +5345,42 @@ LogicalProject(EMPNO=[$0])
LogicalJoin(condition=[true], joinType=[inner])
LogicalTableScan(table=[[CATALOG, SALES, EMP]])
LogicalTableScan(table=[[CATALOG, SALES, DEPT]])
+]]>
+ </Resource>
+ </TestCase>
+ <TestCase name="testOrderByWithIn">
+ <Resource name="sql">
+ <![CDATA[SELECT empno
+FROM emp
+ORDER BY
+CASE WHEN empno IN (1,2) THEN 0 ELSE 1 END]]>
+ </Resource>
+ <Resource name="plan">
+ <![CDATA[
+LogicalProject(EMPNO=[$0])
+ LogicalSort(sort0=[$1], dir0=[ASC])
+ LogicalProject(EMPNO=[$0], EXPR$1=[CASE(SEARCH($0, Sarg[1, 2]), 0, 1)])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+]]>
+ </Resource>
+ </TestCase>
+ <TestCase name="testOrderByWithSubQuery">
+ <Resource name="sql">
+ <![CDATA[SELECT empno
+FROM emp
+ORDER BY
+(SELECT empno FROM emp LIMIT 1)]]>
+ </Resource>
+ <Resource name="plan">
+ <![CDATA[
+LogicalProject(EMPNO=[$0])
+ LogicalSort(sort0=[$1], dir0=[ASC])
+ LogicalProject(EMPNO=[$0], EXPR$1=[$9])
+ LogicalJoin(condition=[true], joinType=[left])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+ LogicalSort(fetch=[1])
+ LogicalProject(EMPNO=[$0])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
]]>
</Resource>
</TestCase>