You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by da...@apache.org on 2011/08/19 23:35:03 UTC

svn commit: r1159791 - in /pig/trunk: CHANGES.txt src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POProject.java test/org/apache/pig/test/TestEvalPipeline2.java

Author: daijy
Date: Fri Aug 19 21:35:02 2011
New Revision: 1159791

URL: http://svn.apache.org/viewvc?rev=1159791&view=rev
Log:
PIG-2185: NullPointerException while Accessing Empty Bag in FOREACH { FILTER }

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POProject.java
    pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1159791&r1=1159790&r2=1159791&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Fri Aug 19 21:35:02 2011
@@ -111,6 +111,8 @@ PIG-2011: Speed up TestTypedMap.java (dv
 
 BUG FIXES
 
+PIG-2185: NullPointerException while Accessing Empty Bag in FOREACH { FILTER } (daijy)
+
 PIG-2227: Wrong jars copied into lib directory in e2e tests when invoked from top level (gates)
 
 PIG-2219: Pig tests fail if ${user.home}/pigtest/conf does not already exist (cwsteinbach via gates)

Modified: pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POProject.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POProject.java?rev=1159791&r1=1159790&r2=1159791&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POProject.java (original)
+++ pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POProject.java Fri Aug 19 21:35:02 2011
@@ -444,15 +444,19 @@ public class POProject extends Expressio
             }
 
             if(overloaded){
-                DataBag retBag = (DataBag)ret;
-                bagIterator = retBag.iterator();
-                if(bagIterator.hasNext()){
-                    processingBagOfTuples = true;
-                    res.result = bagIterator.next();
-                }
-                // If the bag contains no tuple, set the returnStatus to STATUS_EOP
-                if (!processingBagOfTuples)
+                if (ret!=null) {
+                    DataBag retBag = (DataBag)ret;
+                    bagIterator = retBag.iterator();
+                    if(bagIterator.hasNext()){
+                        processingBagOfTuples = true;
+                        res.result = bagIterator.next();
+                    }
+                    // If the bag contains no tuple, set the returnStatus to STATUS_EOP
+                    if (!processingBagOfTuples)
+                        res.returnStatus = POStatus.STATUS_EOP;
+                } else {
                     res.returnStatus = POStatus.STATUS_EOP;
+                }
             }
             else {
                 res.result = (Tuple)ret;

Modified: pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java?rev=1159791&r1=1159790&r2=1159791&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java Fri Aug 19 21:35:02 2011
@@ -1585,4 +1585,34 @@ public class TestEvalPipeline2 {
         Assert.assertFalse(iter.hasNext());
         
     }
+    
+    // See PIG-2185
+    @Test
+    public void testProjectEmptyBag() throws Exception{
+        String[] input = {
+                "{(12)}",
+                "{(23)}",
+                ""
+        };
+        
+        Util.createInputFile(cluster, "table_testProjectEmptyBag", input);
+        
+        pigServer.registerQuery("A = load 'table_testProjectEmptyBag' as (bg:bag{});");
+        pigServer.registerQuery("B = FOREACH A { x = FILTER bg BY $0 == '12'; GENERATE x; };");
+
+        Iterator<Tuple> iter = pigServer.openIterator("B");
+        
+        Tuple t = iter.next();
+        Assert.assertTrue(t.toString().equals("({(12)})"));
+        
+        t = iter.next();
+        Assert.assertTrue(t.toString().equals("({})"));
+        
+        Assert.assertTrue(iter.hasNext());
+        
+        t = iter.next();
+        Assert.assertTrue(t.toString().equals("({})"));
+        
+        Assert.assertFalse(iter.hasNext());
+    }
 }