[
https://issues.apache.org/jira/browse/CALCITE-516?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14251185#comment-14251185
]
Julian Hyde commented on CALCITE-516:
-------------------------------------
I think you're on the right track. Note that the error occurs during
sql-to-rel. It has passed through validation successfully, and recognized that,
in SqlNode format, the two occurrences of {{case when emp.empno in (3) then 0
else 1 end}} are structurally identical, as required for them to be grouping
expressions. But it looks as if the expressions are translated separately and
therefore their RexNode representations look different. IIRC there's some logic
in there to track aliased expressions through translation, but if so, it's not
working correctly here.
> GroupBy on a CASE expression containing IN predicate fails
> ----------------------------------------------------------
>
> Key: CALCITE-516
> URL: https://issues.apache.org/jira/browse/CALCITE-516
> Project: Calcite
> Issue Type: Bug
> Affects Versions: 0.9.1-incubating
> Reporter: Aman Sinha
> Assignee: Julian Hyde
> Labels: newbie
>
> The following query which does a Group-By on a CASE expression that contains
> IN predicate fails. If I replace the IN with an equality or <, > the query
> succeeds. I am not on latest Calcite master but I suspect the same problem
> exists there.
> {code:sql}
> select (case when emp.empno in (3) then 0 else 1 end)
> from emp
> group by (case when emp.empno in (3) then 0 else 1 end);
> java.lang.AssertionError: Internal error: while converting CASE WHEN
> `EMP`.`EMPNO` IN (3) THEN 0 ELSE 1 END
> at org.eigenbase.util.Util.newInternal(Util.java:750)
> at
> org.eigenbase.sql2rel.ReflectiveConvertletTable$1.convertCall(ReflectiveConvertletTable.java:93)
> at
> org.eigenbase.sql2rel.SqlNodeToRexConverterImpl.convertCall(SqlNodeToRexConverterImpl.java:52)
> at
> org.eigenbase.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:4093)
> at
> org.eigenbase.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:1)
> at org.eigenbase.sql.SqlCall.accept(SqlCall.java:125)
> at
> org.eigenbase.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:3988)
> at
> org.eigenbase.sql2rel.SqlToRelConverter$AggConverter.addGroupExpr(SqlToRelConverter.java:4314)
> at
> org.eigenbase.sql2rel.SqlToRelConverter.createAggImpl(SqlToRelConverter.java:2240)
> at
> org.eigenbase.sql2rel.SqlToRelConverter.convertAgg(SqlToRelConverter.java:2191)
> at
> org.eigenbase.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:514)
> at
> org.eigenbase.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:474)
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)