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)