[ 
https://issues.apache.org/jira/browse/CALCITE-3979?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17106670#comment-17106670
 ] 

Zoltan Haindrich commented on CALCITE-3979:
-------------------------------------------

I see - this logic is org.eigenbase old - so it was there from the begining; 
and it was most probably worked more or less correctly until RexNode.equals got 
fixed.

I've taken a look at other places - I've seen a few interesting situations; but 
they should work correctly.


> Simplification might have removed CAST expression(s) incorrectly
> ----------------------------------------------------------------
>
>                 Key: CALCITE-3979
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3979
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.22.0
>            Reporter: Shuo Cheng
>            Assignee: Zoltan Haindrich
>            Priority: Critical
>              Labels: pull-request-available
>             Fix For: 1.23.0
>
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> {code:java}
> @Test public void testCastRemove() throws Exception {
>   final String sql = "select\n" +
>       "case when cast(ename as double) < 5 then 0.0\n" +
>       "     else coalesce(cast(ename as double), 1.0)\n" +
>       "     end as t\n" +
>       " from (\n" +
>       "       select\n" +
>       "          case when ename > 'abc' then ename\n" +
>       "               else null\n" +
>       "               end as ename from emp\n" +
>       " )";
>   sql(sql).withRule(ReduceExpressionsRule.PROJECT_INSTANCE).check();
> }
> {code}
> As shown in the above test case, `cast(ename as double) < 5` was reduced as 
> `ename < 5` when reducing expression, which lead to the following exception:
> {code:java}
> java.math.BigDecimal cannot be cast to 
> org.apache.calcite.util.NlsStringjava.math.BigDecimal cannot be cast to 
> org.apache.calcite.util.NlsStringjava.lang.ClassCastException: 
> java.math.BigDecimal cannot be cast to org.apache.calcite.util.NlsString at 
> org.apache.calcite.util.NlsString.compareTo(NlsString.java:47) at 
> com.google.common.collect.Range.compareOrThrow(Range.java:672) at 
> com.google.common.collect.Cut.compareTo(Cut.java:79) at 
> com.google.common.collect.Range.isConnected(Range.java:526) at 
> org.apache.calcite.rex.RexSimplify.residue(RexSimplify.java:1702) at 
> org.apache.calcite.rex.RexSimplify.simplifyUsingPredicates(RexSimplify.java:1636)
>  at 
> org.apache.calcite.rex.RexSimplify.simplifyComparison(RexSimplify.java:451) 
> at 
> org.apache.calcite.rex.RexSimplify.simplifyComparison(RexSimplify.java:321) 
> at org.apache.calcite.rex.RexSimplify.simplify(RexSimplify.java:292) at 
> org.apache.calcite.rex.RexSimplify.simplifyAndTerms(RexSimplify.java:492) at 
> org.apache.calcite.rex.RexSimplify.simplifyAnd(RexSimplify.java:1275) at 
> org.apache.calcite.rex.RexSimplify.simplify(RexSimplify.java:264) at 
> org.apache.calcite.rex.RexSimplify.simplifyCase(RexSimplify.java:992) at 
> org.apache.calcite.rex.RexSimplify.simplify(RexSimplify.java:270) at 
> org.apache.calcite.rex.RexSimplify.simplifyCase(RexSimplify.java:926) at 
> org.apache.calcite.rex.RexSimplify.simplify(RexSimplify.java:270) at 
> org.apache.calcite.rex.RexSimplify.simplifyUnknownAs(RexSimplify.java:235) at 
> org.apache.calcite.rex.RexSimplify.simplifyPreservingType(RexSimplify.java:174)
>  at 
> org.apache.calcite.rel.rules.ReduceExpressionsRule.reduceExpressions(ReduceExpressionsRule.java:629)
>  at 
> org.apache.calcite.rel.rules.ReduceExpressionsRule$ProjectReduceExpressionsRule.onMatch(ReduceExpressionsRule.java:305)
>  at 
> org.apache.calcite.plan.AbstractRelOptPlanner.fireRule(AbstractRelOptPlanner.java:338)
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to