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 |
+-------+--------+-------------+--------------+-------------+--------------+-------------+