Well, quite simply, it is a bug. We should never give an AssertionError. Can 
you convert it into a minimal test case (can you still reproduce if you remove 
the “group by”, the “as s_state” or the join?) and log a JIRA case.

Julian


> On Dec 27, 2016, at 1:39 AM, baofeng.zbf <[email protected]> wrote:
> 
> 
> 
> Hi,
> 
> TPC-DS Q70 has a subquery like this:
> 
>   select s_state as s_state, 
> //       sum(ss_net_profit),  // added by baofeng
>          rank() over ( partition by s_state order by sum(ss_net_profit) desc) 
> as ranking 
>   from   tpcds.store_sales, tpcds.store, tpcds.date_dim 
>   where  d_month_seq between 1212 and 1212+11 
>        and d_date_sk = ss_sold_date_sk
>        and s_store_sk  = ss_store_sk 
>   group by s_state
> 
> 
> It is a special case, differs from any other window query of TPC-DS, that the 
> “sum(ss_net_profit)” in order by does not appear in select clause. It fails 
> validation, exception like this:
> 
> java.lang.AssertionError: Internal error: invariant violated: conversion 
> result not null
> 
>       at org.apache.calcite.util.Util.newInternal(Util.java:777)
>       at org.apache.calcite.util.Util.permAssert(Util.java:889)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4193)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertSortExpression(SqlToRelConverter.java:4210)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertSortExpression(SqlToRelConverter.java:4208)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertOver(SqlToRelConverter.java:1871)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.access$1500(SqlToRelConverter.java:200)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4185)
>       at 
> mypackage.planner.MyConvertletTable$11.convertCall(MyConvertletTable.java:208)
>       at 
> org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertCall(SqlNodeToRexConverterImpl.java:60)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4300)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:3664)
>       at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:137)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4192)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.createAggImpl(SqlToRelConverter.java:2641)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertAgg(SqlToRelConverter.java:2457)
>       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:2868)
>       at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:556)
> 
> If sum(ss_net_profit) appears in select clause, it works.
> 
> Does this an expected constraints on window operation? Or we can try to 
> improve this?
> 
> Thx,
> Baofeng Zhang.
> 

Reply via email to