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)