You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Feng Zhu (Jira)" <ji...@apache.org> on 2019/10/14 14:24:00 UTC

[jira] [Created] (CALCITE-3411) Incorrect code generated for BigDecimal ConstantExpression

Feng Zhu created CALCITE-3411:
---------------------------------

             Summary: Incorrect code generated for BigDecimal ConstantExpression
                 Key: CALCITE-3411
                 URL: https://issues.apache.org/jira/browse/CALCITE-3411
             Project: Calcite
          Issue Type: Bug
    Affects Versions: 1.21.0
            Reporter: Feng Zhu
            Assignee: Feng Zhu


In current implementation
{code:java}
Expressions.constant("104", BigDecimal.class) -> new java.math.BigDecimal(104L)
Expressions.constant("1000", BigDecimal.class) -> new java.math.BigDecimal(1L, -3){code}
However, in *java.math.BigDecimal*, there is no constructor:
{code:java}
java.math.BigDecimal(long exact, int scale) {code}
Instead we should call method
{code:java}
 java.math.BigDecimal.valueOf(long exact, int scale){code}
h4. *Why this issue did not exposed before?*

*BlockBuilder* conducts optimizations that can bury this issue.
For example, when we disable the optimization. _MaterializationTest#testAggregateMaterializationAggregateFuncs11_ will produce the code below. However, it can't pass the compilation.
{code:java}
final long v = org.apache.calcite.runtime.SqlFunctions.floor(853763696000L, ((Long) new java.math.BigDecimal(1L, -3)).longValue());{code}



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