You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by an...@apache.org on 2013/06/04 01:10:50 UTC

svn commit: r1489223 - in /pig/trunk: CHANGES.txt src/org/apache/pig/builtin/TOP.java src/org/apache/pig/data/DataType.java test/org/apache/pig/test/TestNull.java

Author: aniket486
Date: Mon Jun  3 23:10:50 2013
New Revision: 1489223

URL: http://svn.apache.org/r1489223
Log:
PIG-2828: Handle nulls in DataType.compare

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/builtin/TOP.java
    pig/trunk/src/org/apache/pig/data/DataType.java
    pig/trunk/test/org/apache/pig/test/TestNull.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1489223&r1=1489222&r2=1489223&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Mon Jun  3 23:10:50 2013
@@ -192,6 +192,8 @@ PIG-3013: BinInterSedes improve chararra
 
 BUG FIXES
 
+PIG-2828: Handle nulls in DataType.compare (aniket486)
+
 PIG-3335: TestErrorHandling.tesNegative7 fails on MR2 (xuefuz)
 
 PIG-3316: Pig failed to interpret DateTime values in some special cases (xuefuz)

Modified: pig/trunk/src/org/apache/pig/builtin/TOP.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/TOP.java?rev=1489223&r1=1489222&r2=1489223&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/TOP.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/TOP.java Mon Jun  3 23:10:50 2013
@@ -92,7 +92,9 @@ public class TOP extends EvalFunc<DataBa
                 Object field2 = o2.get(fieldNum);
                 if (!typeFound) {
                     datatype = DataType.findType(field1);
-                    typeFound = true;
+                    if(datatype != DataType.NULL) {
+                        typeFound = true;
+                    }
                 }
                 return DataType.compare(field1, field2, datatype, datatype);
             } catch (ExecException e) {

Modified: pig/trunk/src/org/apache/pig/data/DataType.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/data/DataType.java?rev=1489223&r1=1489222&r2=1489223&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/data/DataType.java (original)
+++ pig/trunk/src/org/apache/pig/data/DataType.java Mon Jun  3 23:10:50 2013
@@ -453,6 +453,17 @@ public class DataType {
     @SuppressWarnings("unchecked")
     public static int compare(Object o1, Object o2, byte dt1, byte dt2) {
         if (dt1 == dt2) {
+            if(o1 == null) {
+                if(o2 == null) {
+                    return 0;
+                } else {
+                    return -1;
+                }
+            } else {
+                if(o2 == null) {
+                    return 1;
+                }
+            }
             switch (dt1) {
             case NULL:
                 return 0;

Modified: pig/trunk/test/org/apache/pig/test/TestNull.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestNull.java?rev=1489223&r1=1489222&r2=1489223&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestNull.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestNull.java Mon Jun  3 23:10:50 2013
@@ -232,6 +232,21 @@ public class TestNull {
         }
         return true;
     }
+    
+    @Test
+    public void testCompare() {
+        Object o1 = new Object();
+        Object o2 = null;
+        assertTrue(DataType.compare(o1, o2, DataType.NULL, DataType.NULL) > 0);
+
+        o1 = null;
+        o2 = new Object();
+        assertTrue(DataType.compare(o1, o2, DataType.NULL, DataType.NULL) < 0);
+
+        o1 = null;
+        o2 = null;
+        assertTrue(DataType.compare(o1, o2, DataType.NULL, DataType.NULL) == 0);
+    }
 
     @Test
     public void testOperator() throws ExecException {