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>

Reply via email to