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

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

I understand now. Changing how the cohorts are generated sounds perfect.

(I thought that you were trying to change the order that HepPlanner fires 
rules. You can see why I misunderstood: both HepPlanner and CalcRelSplitter 
would be affected by changes to the topological sort, your patch does not touch 
either HepPlanner or CalcRelSplitter, and you only mention HepPlanner in your 
discussion. If you had added a parameter to TopologicalOrderIterator it would 
have been clear which component you were trying to change.)

I took a quick look at your patch, and it looks good. I will review and commit 
when I have some more time.

Your algorithm seems to be doing something like a topological sort. Did you 
consider using TopologicalOrderIterator (maybe with a Comparator to settle 
ties) for this?

> 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