You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Mihai Budiu (Jira)" <ji...@apache.org> on 2024/12/16 21:44:00 UTC
[jira] [Created] (CALCITE-6733) Type inferred by coercion for comparisons with decimal is too narrow
Mihai Budiu created CALCITE-6733:
------------------------------------
Summary: Type inferred by coercion for comparisons with decimal is too narrow
Key: CALCITE-6733
URL: https://issues.apache.org/jira/browse/CALCITE-6733
Project: Calcite
Issue Type: Bug
Components: core
Affects Versions: 1.38.0
Reporter: Mihai Budiu
The following statement fails at runtime:
{code}
SELECT ASCII('8') >= ABS(1.1806236821);
{code}
with the exception:
{code}
java.lang.ArithmeticException: Value 56 cannot be represented as a DECIMAL(11, 10)
at org.apache.calcite.linq4j.tree.Primitive.checkOverflow(Primitive.java:410)
at org.apache.calcite.linq4j.tree.Primitive.integerDecimalCast(Primitive.java:515)
{code}
I have introduced this bug when reworking the type coercion.
The cause is an incorrect derivation of precision/scale in the common type used for comparisons;
{code}
RelDataType result =
factory.createSqlType(type2.getSqlTypeName(),
Math.max(type1.getPrecision(), type2.getPrecision()), type2.getScale());
{code}
This is wrong, because the precision is the total number of digits, and not the number of digits before the decimal point. The precision is derived is not sufficient to store the integer number.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)