You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "Gopal V (JIRA)" <ji...@apache.org> on 2013/06/07 02:08:20 UTC

[jira] [Updated] (HIVE-4681) Fix ORC TimestampTreeReader.nextVector() to handle milli-nano math corectly

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

Gopal V updated HIVE-4681:
--------------------------

    Attachment: HIVE-4160-001.patch

Refactored TimestampTreeReader.nextVector() with bug fix.
                
> Fix ORC TimestampTreeReader.nextVector() to handle milli-nano math corectly
> ---------------------------------------------------------------------------
>
>                 Key: HIVE-4681
>                 URL: https://issues.apache.org/jira/browse/HIVE-4681
>             Project: Hive
>          Issue Type: Sub-task
>            Reporter: Gopal V
>            Assignee: Gopal V
>              Labels: vectorization
>         Attachments: HIVE-4160-001.patch
>
>
> The current TimestampTreeReader implementation is broken when fed only milliseconds.
> If TS = 222ms.
> {code}
>    result.vector[i] = ... // == 0;
>    nanoVector.vector[i] = ... // == 222000000
>    if (result.vector[i] >= 0) {
>      result.vector[i] += nanoVector.vector[i] / 1000000; // 222
>    }
> ...
>    result.vector[i] = (result.vector[i] * 1000000)
>                 + nanoVector.vector[i];
>    // result.vector[i] == 444000000
> {code}
> which is broken.
> This is not a problem in the Timestamp case, because 
> {code}
> ts.setTime(222);        // {time=0; nanos=222000000}
> ts.setNanos(222000000); // {time=0; nanos=222000000}
> {code}
> Since that is not additive, the error does not occur in the regular ORC reader.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira