Paul Rogers created IMPALA-7967:
-----------------------------------
Summary: Incorrect decimal size in V2 for a numeric const cast to
BIGINT
Key: IMPALA-7967
URL: https://issues.apache.org/jira/browse/IMPALA-7967
Project: IMPALA
Issue Type: Bug
Components: Frontend
Affects Versions: Impala 3.1.0
Reporter: Paul Rogers
Assignee: Paul Rogers
Decimal version 2 introduces revised rules for computing decimal width. For
example:
{noformat}
CAST(1 AS DECIMAL(10, 0)) + CAST(2 AS DECIMAL(19,0)) --> DECIMAL(20,0)
{noformat}
The FE uses rules to convert from one type to another. The rule to convert from
{{BIGINT}} to {{DECIMAL}} is:
{noformat}
BIGINT --> DECIMAL(19,0)
{noformat}
Put these two together:
{noformat}
CAST(1 AS DECIMAL(10, 0)) + CAST(2 AS BIGINT)
{noformat}
The result should be {{DECIMAL(20,0)}}. But, because of a bug in the way
constant folding works, the result is actually {{DECIMAL(11,0)}} as seen in
{{AnalyzeExprsTest.TestDecimalArithmetic()}}:
{code:java}
testDecimalExpr(decimal_10_0 + " + cast(1 as bigint)",
ScalarType.createDecimalType(11, 0));
{code}
It seems one reason the bug was not caught is that the unit tests only check
for constants, not for columns. Modify the tests to work against
{{functional.alltypes}} (they currently work without a table), and substitute
{{bigint_col}} for {{CAST(2 AS BIGINT)}}.
Expected that the code should have followed the rules described above whether
the values are a column, or a constant explicitly cast to the same type as the
column. (Constants without out a cast should follow rules for their "natural
type" which is what appears to be incorrectly happening in the test case above.)
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]