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. >
