[ 
https://issues.apache.org/jira/browse/PIG-2828?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13672880#comment-13672880
 ] 

Aniket Mokashi commented on PIG-2828:
-------------------------------------

DataType compare api is little broken.
public static int compare(Object o1, Object o2) - uses reflection to infer 
datatypes of o1 and o2.
public static int compare(Object o1, Object o2, byte dt1, byte dt2) - doesn't 
use reflection, however callers of this api use reflection and also deal with 
NULLs. 
Currently, callers of second API handle NULLs somewhat similarly but its not 
consistent. We can refactor the api to avoid reflection and handle NULLs 
consistently in a separate jira.
Right now, TOP that uses second api directly fails with NPE if o1 or o2 has 
null data. We should fix that with NULL < non-NULL semantics. 
                
> DataType.compare null
> ---------------------
>
>                 Key: PIG-2828
>                 URL: https://issues.apache.org/jira/browse/PIG-2828
>             Project: Pig
>          Issue Type: Bug
>            Reporter: Haitao Yao
>         Attachments: DataType.patch, test.patch
>
>
> While using TOP, and if the DataBag contains null value to compare, it will 
> generate the following exception:
> Caused by: java.lang.NullPointerException
>       at org.apache.pig.data.DataType.compare(DataType.java:427)
>       at org.apache.pig.builtin.TOP$TupleComparator.compare(TOP.java:97)
>       at org.apache.pig.builtin.TOP$TupleComparator.compare(TOP.java:1)
>       at java.util.PriorityQueue.siftUpUsingComparator(PriorityQueue.java:649)
>       at java.util.PriorityQueue.siftUp(PriorityQueue.java:627)
>       at java.util.PriorityQueue.offer(PriorityQueue.java:329)
>       at java.util.PriorityQueue.add(PriorityQueue.java:306)
>       at org.apache.pig.builtin.TOP.updateTop(TOP.java:141)
>       at org.apache.pig.builtin.TOP.exec(TOP.java:116)
> code: (TOP.java, starts with line 91)
>                 Object field1 = o1.get(fieldNum);
>                 Object field2 = o2.get(fieldNum);
>                 if (!typeFound) {
>                     datatype = DataType.findType(field1);
>                     typeFound = true;
>                 }
>                 return DataType.compare(field1, field2, datatype, datatype);
> The reason is that if the typeFound is true , and the dataType is not null, 
> and field1 is null, the script failed.
> So we need to judge the field1 whether is null.

--
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

Reply via email to