[
https://issues.apache.org/jira/browse/CALCITE-3079?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated CALCITE-3079:
------------------------------------
Labels: pull-request-available (was: )
> Successive dependent windows cannot be implemented in same expression level
> ---------------------------------------------------------------------------
>
> Key: CALCITE-3079
> URL: https://issues.apache.org/jira/browse/CALCITE-3079
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.20.0
> Reporter: Feng Zhu
> Priority: Major
> Labels: pull-request-available
>
> Recently, we encountered an IndexOutOfBoundsException when running a
> complicated query containing successive dependent windows.The issue can be
> reproduced by the following simple query on table *t1(a, b, c)*.
> {code:java}
> Q1:
> select sum(s) over (partition by aa) as ss " +
> from (
> select a as aa, sum(b) over (partition by a, c) as s
> from t1
> ) t2";{code}
> However, the modified query below can be executed in a right way.
> {code:java}
> Q2:
> select sum(s) over (partition by aa) as ss " +
> from (
> select a as aa, sum(b) over (partition by a, c) + 0 as s
> from t1
> ) t2{code}
> This issue is caused by
> *_ProjectToWindowRule_*({color:#FF0000}CalcRelSplitter{color}). When
> splitting window expressions in Project node, the rule ignores to check
> whether a window and its input window are in the same level.Due to such
> beheavior, two successive window expressions are implemented in same level
> and the RelNode after transformation is:
> {code:java}
> LogicalProject($0=[$4])
> LogicalWindow(window#0=[window(partition {0, 2} order by [] range between
> UNBOUNDED PRECEDING and UNBOUNDED FOLLOWING aggs [SUM($1)])],
> window#1=[window(partition {0} order by [] range between UNBOUNDED PRECEDING
> and UNBOUNDED FOLLOWING aggs [SUM($3)])])
> EnumerableTableScan(subset=[rel#7:Subset#0.ENUMERABLE.[]], table=[[ttt,
> test]]){code}
> As for *Q2*, two window expressions are not "successive", an _*Add(+)*_
> operation results to implementing them in different levels. The RelNode after
> transformation is:
> {code:java}
> LogicalProject($0=[$2])
> LogicalWindow(window#0=[window(partition {0} order by [] range between
> UNBOUNDED PRECEDING and UNBOUNDED FOLLOWING aggs [SUM($1)])])
> LogicalProject(a=[$0], $1=[+($3, 0)])
> LogicalWindow(window#0=[window(partition {0, 2} order by [] range
> between UNBOUNDED PRECEDING and UNBOUNDED FOLLOWING aggs [SUM($1)])])
> EnumerableTableScan(subset=[rel#7:Subset#0.ENUMERABLE.[]],
> table=[[ttt, test]]){code}
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)