Jesus Camacho Rodriguez created CALCITE-1344:
------------------------------------------------

             Summary: Incorrect inferred precision when BigDecimal value is 
less than 1
                 Key: CALCITE-1344
                 URL: https://issues.apache.org/jira/browse/CALCITE-1344
             Project: Calcite
          Issue Type: Bug
    Affects Versions: 1.8.0
            Reporter: Jesus Camacho Rodriguez
            Assignee: Jesus Camacho Rodriguez


Method {{makeExactLiteral(BigDecimal)}} in RexBuilder infers the incorrect 
precision when decimal < 1 e.g. for 0.06 it infers the type to be Decimal(1,2) 
instead of Decimal(3,2).

{code:java}
  /**
   * Creates a numeric literal.
   */
  public RexLiteral makeExactLiteral(BigDecimal bd) {
    RelDataType relType;
    int scale = bd.scale();
    long l = bd.unscaledValue().longValue();
    assert scale >= 0;
    assert scale <= typeFactory.getTypeSystem().getMaxNumericScale() : scale;
    assert BigDecimal.valueOf(l, scale).equals(bd);
    if (scale == 0) {
      if ((l >= Integer.MIN_VALUE) && (l <= Integer.MAX_VALUE)) {
        relType = typeFactory.createSqlType(SqlTypeName.INTEGER);
      } else {
        relType = typeFactory.createSqlType(SqlTypeName.BIGINT);
      }
    } else {
      int precision = bd.unscaledValue().abs().toString().length();
      relType =
          typeFactory.createSqlType(SqlTypeName.DECIMAL, precision, scale);
    }
    return makeExactLiteral(bd, relType);
  }
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to