[ 
https://issues.apache.org/jira/browse/DRILL-3909?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Volodymyr Vysotskyi resolved DRILL-3909.
----------------------------------------
    Resolution: Fixed

Fixed in the scope of DRILL-6094

> Decimal round functions corrupts input data
> -------------------------------------------
>
>                 Key: DRILL-3909
>                 URL: https://issues.apache.org/jira/browse/DRILL-3909
>             Project: Apache Drill
>          Issue Type: Bug
>            Reporter: Steven Phillips
>            Assignee: Volodymyr Vysotskyi
>            Priority: Major
>             Fix For: Future
>
>
> The Decimal 28 and 38 round functions, instead of creating a new buffer and 
> copying data from the incoming buffer, set the output buffer equal to the 
> input buffer, and then subsequently mutate the data in that buffer. This 
> causes the data in the input buffer to be corrupted.
> A simple example to reproduce:
> {code}
> $ cat a.json
> { a : "999999999.9999999995678" }
> 0: jdbc:drill:drillbit=localhost> create table a as select cast(a as 
> decimal(38,18)) a from `a.json`;
> +-----------+----------------------------+
> | Fragment  | Number of records written  |
> +-----------+----------------------------+
> | 0_0       | 1                          |
> +-----------+----------------------------+
> 1 row selected (0.206 seconds)
> 0: jdbc:drill:drillbit=localhost> select round(a, 9) from a;
> +-----------------------+
> |        EXPR$0         |
> +-----------------------+
> | 1000000000.000000000  |
> +-----------------------+
> 1 row selected (0.121 seconds)
> 0: jdbc:drill:drillbit=localhost> select round(a, 11) from a;
> +------------------------+
> |         EXPR$0         |
> +------------------------+
> | 999999999.99999999957  |
> +------------------------+
> 1 row selected (0.115 seconds)
> 0: jdbc:drill:drillbit=localhost> select round(a, 9), round(a, 11) from a;
> +-----------------------+----------------+
> |        EXPR$0         |     EXPR$1     |
> +-----------------------+----------------+
> | 1000000000.000000000  | 1.00000000000  |
> +-----------------------+----------------+
> {code}
> In the third example, there are two round expressions operating on the same 
> incoming decimal vector, and you can see that the result for the second 
> expression is incorrect.
> Not critical because Decimal type is considered alpha right now.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to