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

Gonzalo Ortiz commented on CALCITE-6210:
----------------------------------------

IMHO the function override, if possible, would be the best solution. As 
suggested by [~mbudiu], we can disable the simplification, but that also 
disables other optimizations that are not problematic. I've created a patch in 
Pinot ([here|https://github.com/apache/pinot/pull/12401]) that first disables 
simplification, then transforms SQL into Rel, then looks for all problematic 
castings to transform them to our function call and finally trim the expression 
with simplifier turned on.

I didn't benchmark the solution, but the process seems to be very error prone.

> Cast to VARBINARY causes an assertion failure
> ---------------------------------------------
>
>                 Key: CALCITE-6210
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6210
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.36.0
>            Reporter: Mihai Budiu
>            Priority: Minor
>              Labels: pull-request-available
>
> This test in SqlOperatorTest:
> {code:java}
>  SqlOperatorFixture f = fixture();
>  f.checkScalar("CAST('00' AS VARBINARY)", "00", "VARBINARY NOT NULL");
> {code}
> Causes the following assertion failure:
> {code}
> java.lang.AssertionError: value 00 does not match type class      
> org.apache.calcite.avatica.util.ByteString
>       at 
> org.apache.calcite.linq4j.tree.ConstantExpression.<init>(ConstantExpression.java:51)
>       at 
> org.apache.calcite.linq4j.tree.Expressions.constant(Expressions.java:585)
>       at 
> org.apache.calcite.linq4j.tree.OptimizeShuttle.visit(OptimizeShuttle.java:305)
>       at 
> org.apache.calcite.linq4j.tree.UnaryExpression.accept(UnaryExpression.java:39)
>       at 
> org.apache.calcite.linq4j.tree.TernaryExpression.accept(TernaryExpression.java:47)
>       at 
> org.apache.calcite.linq4j.tree.DeclarationStatement.accept(DeclarationStatement.java:45)
>       at 
> org.apache.calcite.linq4j.tree.DeclarationStatement.accept(DeclarationStatement.java:27)
>       at 
> org.apache.calcite.linq4j.tree.BlockBuilder.optimize(BlockBuilder.java:426)
>       at 
> org.apache.calcite.linq4j.tree.BlockBuilder.toBlock(BlockBuilder.java:340)
>       at 
> org.apache.calcite.rex.RexExecutorImpl.compile(RexExecutorImpl.java:102)
>       at 
> org.apache.calcite.rex.RexExecutorImpl.compile(RexExecutorImpl.java:68)
>       at 
> org.apache.calcite.rex.RexExecutorImpl.reduce(RexExecutorImpl.java:133)
>       at 
> org.apache.calcite.rex.RexSimplify.simplifyCast(RexSimplify.java:2272)
>       at org.apache.calcite.rex.RexSimplify.simplify(RexSimplify.java:292)
>       at 
> org.apache.calcite.rex.RexSimplify.simplifyUnknownAs(RexSimplify.java:250)
>       at 
> org.apache.calcite.rex.RexSimplify.simplifyPreservingType(RexSimplify.java:189)
>       at 
> org.apache.calcite.rex.RexSimplify.simplifyPreservingType(RexSimplify.java:184)
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to