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());
+ }
}