[ 
https://issues.apache.org/jira/browse/CALCITE-841?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14700298#comment-14700298
 ] 

Julian Hyde commented on CALCITE-841:
-------------------------------------

bq. the root cause seems in CalcRelSplitter itself

I agree. There are many links in this chain (topological iterator, hep engine, 
CalcRelSplitter, lack of a rule to merge windows, and the rule that converts a 
window or windows to a physical plan) but CalcRelSplitter is probably the most 
important. Fixing CalcRelSplitter would fix this problem in both Hep and 
Volcano planners.

Fixing topological iterator would be arbitrary -- before this problem occurred, 
neither of us would have looked at topological iterator or even HepPlanner and 
concluded that it was doing the wrong thing. If we were to change it there is a 
good chance that the new order will be "wrong" for another case.

> When the argument of window functions is an expression, redundant windows 
> could be generated
> --------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-841
>                 URL: https://issues.apache.org/jira/browse/CALCITE-841
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Sean Hsuan-Yi Chu
>            Assignee: Julian Hyde
>
> Firstly of all, this issue happens when HepPlanner is used with 
> ProjectToWindowRule.PROJECT rule.
> A query with this pattern:
> {code}
> select fn(col) over w, fn(expr) over w
> from ...
> {code}
> will generate two "LogicalWindow" even if we have only an identical window 
> frame.
> For example, 
> {code}
> select sum(deptno) over(partition by deptno order by sal) as sum1, 
> sum(deptno + deptno) over(partition by deptno order by sal) as sum2
> from emp
> {code}
> gives:
> {code}
> LogicalProject($0=[$2], $1=[$4])
>   LogicalWindow(window#0=[window(partition {1} order by [0] range between 
> UNBOUNDED PRECEDING and CURRENT ROW aggs [SUM($3)])])
>     LogicalProject(SAL=[$0], DEPTNO=[$1], $2=[$2], $3=[+($1, $1)])
>       LogicalProject(SAL=[$5], DEPTNO=[$7], $2=[$9])
>         LogicalWindow(window#0=[window(partition {7} order by [5] range 
> between UNBOUNDED PRECEDING and CURRENT ROW aggs [SUM($7)])])
>           LogicalTableScan(table=[[CATALOG, SALES, EMP]])
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to