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)