[ 
https://issues.apache.org/jira/browse/CALCITE-2078?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Julian Hyde updated CALCITE-2078:
---------------------------------
    Description: 
When window functions use aggregate functions in PARTITION BY or ORDER BY 
sub-clause of the OVER clause, Calcite gives a NullPointerException.

Currently the scene of window functions on top of nested aggregations is 
already in consideration, however, that one as follow is not:
{code:sql}
select
  sum(sal),
  rank() over (order by sum(sal))
from emp
group by deptno
{code}

An NPE from SqlToRelConverter:
{code}
java.lang.NullPointerException
        at 
com.google.common.base.Preconditions.checkNotNull(Preconditions.java:212)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4470)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertOver(SqlToRelConverter.java:1839)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.access$1500(SqlToRelConverter.java:213)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4462)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.createAggImpl(SqlToRelConverter.java:2857)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertAgg(SqlToRelConverter.java:2675)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:660)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:622)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3085)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:558)
        at 
org.apache.calcite.test.SqlToRelTestBase$TesterImpl.convertSqlToRel(SqlToRelTestBase.java:574)
        at 
org.apache.calcite.test.RelOptTestBase.checkPlanning(RelOptTestBase.java:137)
        at 
org.apache.calcite.test.RelOptTestBase.checkPlanning(RelOptTestBase.java:120)
        at 
org.apache.calcite.test.RelOptTestBase.checkPlanning(RelOptTestBase.java:95)
        at 
org.apache.calcite.test.RelOptTestBase.checkPlanning(RelOptTestBase.java:84)
        at 
org.apache.calcite.test.RelOptRulesTest.testWindowAggregatesWithOrderByAgg(RelOptRulesTest.java:2722)
{code}


  was:
Currently the scene of window functions on top of nested aggregations is 
already in consideration, however, that one as follow is not:
{code:sql}
select
  sum(sal),
  rank() over (order by sum(sal))
from emp
group by deptno
{code}

An NPE from SqlToRelConverter:
{code}
java.lang.NullPointerException
        at 
com.google.common.base.Preconditions.checkNotNull(Preconditions.java:212)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4470)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertOver(SqlToRelConverter.java:1839)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.access$1500(SqlToRelConverter.java:213)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4462)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.createAggImpl(SqlToRelConverter.java:2857)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertAgg(SqlToRelConverter.java:2675)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:660)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:622)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3085)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:558)
        at 
org.apache.calcite.test.SqlToRelTestBase$TesterImpl.convertSqlToRel(SqlToRelTestBase.java:574)
        at 
org.apache.calcite.test.RelOptTestBase.checkPlanning(RelOptTestBase.java:137)
        at 
org.apache.calcite.test.RelOptTestBase.checkPlanning(RelOptTestBase.java:120)
        at 
org.apache.calcite.test.RelOptTestBase.checkPlanning(RelOptTestBase.java:95)
        at 
org.apache.calcite.test.RelOptTestBase.checkPlanning(RelOptTestBase.java:84)
        at 
org.apache.calcite.test.RelOptRulesTest.testWindowAggregatesWithOrderByAgg(RelOptRulesTest.java:2722)
{code}



> Aggregate functions in OVER clause
> ----------------------------------
>
>                 Key: CALCITE-2078
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2078
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Liao Xintao
>            Assignee: Julian Hyde
>
> When window functions use aggregate functions in PARTITION BY or ORDER BY 
> sub-clause of the OVER clause, Calcite gives a NullPointerException.
> Currently the scene of window functions on top of nested aggregations is 
> already in consideration, however, that one as follow is not:
> {code:sql}
> select
>   sum(sal),
>   rank() over (order by sum(sal))
> from emp
> group by deptno
> {code}
> An NPE from SqlToRelConverter:
> {code}
> java.lang.NullPointerException
>       at 
> com.google.common.base.Preconditions.checkNotNull(Preconditions.java:212)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4470)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertOver(SqlToRelConverter.java:1839)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.access$1500(SqlToRelConverter.java:213)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4462)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.createAggImpl(SqlToRelConverter.java:2857)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertAgg(SqlToRelConverter.java:2675)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:660)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:622)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3085)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:558)
>       at 
> org.apache.calcite.test.SqlToRelTestBase$TesterImpl.convertSqlToRel(SqlToRelTestBase.java:574)
>       at 
> org.apache.calcite.test.RelOptTestBase.checkPlanning(RelOptTestBase.java:137)
>       at 
> org.apache.calcite.test.RelOptTestBase.checkPlanning(RelOptTestBase.java:120)
>       at 
> org.apache.calcite.test.RelOptTestBase.checkPlanning(RelOptTestBase.java:95)
>       at 
> org.apache.calcite.test.RelOptTestBase.checkPlanning(RelOptTestBase.java:84)
>       at 
> org.apache.calcite.test.RelOptRulesTest.testWindowAggregatesWithOrderByAgg(RelOptRulesTest.java:2722)
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to