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

Matt McCline updated HIVE-18622:
--------------------------------
    Description: 
 
 Many vector expression classes are setting noNulls to true which does not work 
if the VRB is a scratch column being reused. The previous use may have set 
noNulls to false and the isNull array will have some rows marked as NULL. The 
result is wrong query results and sometimes NPEs (for BytesColumnVector).

So, many vector expressions need this:
{code:java}
      // Carefully handle NULLs...

      /*
       * For better performance on LONG/DOUBLE we don't want the conditional
       * statements inside the for loop.
       */
      outputColVector.noNulls = false;
 {code}
And, vector expressions need to make sure the isNull array entry is set when 
outputColVector.noNulls is false.

And, all place that assign column value need to set noNulls to false when the 
value is NULL.

Almost all cases where noNulls is set to true are incorrect.

  was:
 
Many vector expression classes are setting noNulls to true which does not work 
if the VRB is a scratch column being reused.  The previous use may have set 
noNulls to false and the isNull array will have some rows marked as NULL.  The 
result is wrong query results and sometimes NPEs (for BytesColumnVector).

So, many vector expressions need this:

{code:java}
      // Carefully handle NULLs...

      /*
       * For better performance on LONG/DOUBLE we don't want the conditional
       * statements inside the for loop.
       */
      outputColVector.noNulls = false;
 {code}

And, vector expressions need to make sure the isNull array is set when 
outputColVector.noNulls is false.

And, all place that assign column value need to set noNulls to false when the 
value is NULL.


> Vectorization: IF Statements, Comparisons, and more do not handle NULLs 
> correctly
> ---------------------------------------------------------------------------------
>
>                 Key: HIVE-18622
>                 URL: https://issues.apache.org/jira/browse/HIVE-18622
>             Project: Hive
>          Issue Type: Bug
>          Components: Hive
>            Reporter: Matt McCline
>            Assignee: Matt McCline
>            Priority: Critical
>             Fix For: 3.0.0
>
>         Attachments: HIVE-18622.03.patch, HIVE-18622.04.patch
>
>
>  
>  Many vector expression classes are setting noNulls to true which does not 
> work if the VRB is a scratch column being reused. The previous use may have 
> set noNulls to false and the isNull array will have some rows marked as NULL. 
> The result is wrong query results and sometimes NPEs (for BytesColumnVector).
> So, many vector expressions need this:
> {code:java}
>       // Carefully handle NULLs...
>       /*
>        * For better performance on LONG/DOUBLE we don't want the conditional
>        * statements inside the for loop.
>        */
>       outputColVector.noNulls = false;
>  {code}
> And, vector expressions need to make sure the isNull array entry is set when 
> outputColVector.noNulls is false.
> And, all place that assign column value need to set noNulls to false when the 
> value is NULL.
> Almost all cases where noNulls is set to true are incorrect.



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

Reply via email to