This is an automated email from the ASF dual-hosted git repository.

vladimirsitnikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/master by this push:
     new 9d3862c  [CALCITE-3655] SortJoinTransposeRule must not push sort into 
Project that contains OVER expressions
9d3862c is described below

commit 9d3862cb1c95f7919e68393a3a6bdf46b3e2f8f0
Author: Vladimir Sitnikov <[email protected]>
AuthorDate: Tue Dec 31 15:59:15 2019 +0300

    [CALCITE-3655] SortJoinTransposeRule must not push sort into Project that 
contains OVER expressions
---
 .../rel/rules/SortProjectTransposeRule.java        |  5 ++++-
 core/src/test/resources/sql/winagg.iq              | 22 ++++++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git 
a/core/src/main/java/org/apache/calcite/rel/rules/SortProjectTransposeRule.java 
b/core/src/main/java/org/apache/calcite/rel/rules/SortProjectTransposeRule.java
index 3928d68..5e886b8 100644
--- 
a/core/src/main/java/org/apache/calcite/rel/rules/SortProjectTransposeRule.java
+++ 
b/core/src/main/java/org/apache/calcite/rel/rules/SortProjectTransposeRule.java
@@ -33,6 +33,7 @@ import org.apache.calcite.rel.logical.LogicalProject;
 import org.apache.calcite.rex.RexCall;
 import org.apache.calcite.rex.RexCallBinding;
 import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexOver;
 import org.apache.calcite.rex.RexUtil;
 import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.validate.SqlMonotonicity;
@@ -80,7 +81,9 @@ public class SortProjectTransposeRule extends RelOptRule {
       RelBuilderFactory relBuilderFactory, String description) {
     this(
         operand(sortClass,
-            operand(projectClass, any())),
+            operandJ(projectClass, null,
+                p -> !RexOver.containsOver(p.getProjects(), null),
+                any())),
         relBuilderFactory, description);
   }
 
diff --git a/core/src/test/resources/sql/winagg.iq 
b/core/src/test/resources/sql/winagg.iq
index cdec70b..b64e1fa 100644
--- a/core/src/test/resources/sql/winagg.iq
+++ b/core/src/test/resources/sql/winagg.iq
@@ -507,6 +507,28 @@ select emp."ENAME", emp."DEPTNO",
  nth_value(emp."DEPTNO", 8) over() as "eighth_value",
  nth_value(emp."DEPTNO", 10) over() as "tenth_value"
 from emp order by emp."ENAME";
+EnumerableSort(sort0=[$0], dir0=[ASC])
+  EnumerableWindow(window#0=[window(partition {} order by [] range between 
UNBOUNDED PRECEDING and UNBOUNDED FOLLOWING aggs [NTH_VALUE($1, $2), 
NTH_VALUE($1, $3), NTH_VALUE($1, $4), NTH_VALUE($1, $5), NTH_VALUE($1, $6)])])
+    EnumerableUnion(all=[true])
+      EnumerableCalc(expr#0=[{inputs}], expr#1=['Jane'], expr#2=[10], 
EXPR$0=[$t1], EXPR$1=[$t2])
+        EnumerableValues(tuples=[[{ 0 }]])
+      EnumerableCalc(expr#0=[{inputs}], expr#1=['Bob'], expr#2=[10], 
EXPR$0=[$t1], EXPR$1=[$t2])
+        EnumerableValues(tuples=[[{ 0 }]])
+      EnumerableCalc(expr#0=[{inputs}], expr#1=['Eric'], expr#2=[20], 
EXPR$0=[$t1], EXPR$1=[$t2])
+        EnumerableValues(tuples=[[{ 0 }]])
+      EnumerableCalc(expr#0=[{inputs}], expr#1=['Susan'], expr#2=[30], 
EXPR$0=[$t1], EXPR$1=[$t2])
+        EnumerableValues(tuples=[[{ 0 }]])
+      EnumerableCalc(expr#0=[{inputs}], expr#1=['Alice'], expr#2=[30], 
EXPR$0=[$t1], EXPR$1=[$t2])
+        EnumerableValues(tuples=[[{ 0 }]])
+      EnumerableCalc(expr#0=[{inputs}], expr#1=['Adam'], expr#2=[50], 
EXPR$0=[$t1], EXPR$1=[$t2])
+        EnumerableValues(tuples=[[{ 0 }]])
+      EnumerableCalc(expr#0=[{inputs}], expr#1=['Eve'], expr#2=[50], 
EXPR$0=[$t1], EXPR$1=[$t2])
+        EnumerableValues(tuples=[[{ 0 }]])
+      EnumerableCalc(expr#0=[{inputs}], expr#1=['Grace'], expr#2=[60], 
EXPR$0=[$t1], EXPR$1=[$t2])
+        EnumerableValues(tuples=[[{ 0 }]])
+      EnumerableCalc(expr#0=[{inputs}], expr#1=['Wilma'], 
expr#2=[null:INTEGER], EXPR$0=[$t1], EXPR$1=[$t2])
+        EnumerableValues(tuples=[[{ 0 }]])
+!plan
 
+-------+--------+-------------+--------------+-------------+--------------+-------------+
 | ENAME | DEPTNO | first_value | second_value | fifth_value | eighth_value | 
tenth_value |
 
+-------+--------+-------------+--------------+-------------+--------------+-------------+

Reply via email to