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.
smime.p7s
Description: S/MIME cryptographic signature
