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/05/19 23:28:03 UTC

svn commit: r1125124 - 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: Thu May 19 21:28:03 2011
New Revision: 1125124

URL: http://svn.apache.org/viewvc?rev=1125124&view=rev
Log:
PIG-2078: POProject.getNext(DataBag) does not handle null

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=1125124&r1=1125123&r2=1125124&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Thu May 19 21:28:03 2011
@@ -227,6 +227,8 @@ PIG-1696: Performance: Use System.arrayc
 
 BUG FIXES
 
+PIG-2078: POProject.getNext(DataBag) does not handle null (daijy)
+
 PIG-2029: Inconsistency in Pig Stats reports (rding)
 
 PIG-2070: "Unknown" appears in error message for an error case (thejas)

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=1125124&r1=1125123&r2=1125124&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 Thu May 19 21:28:03 2011
@@ -256,15 +256,17 @@ public class POProject extends Expressio
      * @throws ExecException 
      */
     protected Result consumeInputBag(Result input) throws ExecException {
+        if(isInputAttached() || isStar()){
+            Result retVal = new Result();
+            retVal.result = input.result;
+            retVal.returnStatus = POStatus.STATUS_OK;
+            detachInput();
+            return retVal;
+        }
+        
         if (input.result instanceof DataBag) {
             DataBag inpBag = (DataBag) input.result;
             Result retVal = new Result();
-            if(isInputAttached() || isStar()){
-                retVal.result = inpBag;
-                retVal.returnStatus = POStatus.STATUS_OK;
-                detachInput();
-                return retVal;
-            }
             
             DataBag outBag;
             if(resultSingleTupleBag) {
@@ -306,6 +308,11 @@ public class POProject extends Expressio
             retVal.result = ((Tuple)input.result).get(columns.get(0));
             retVal.returnStatus = POStatus.STATUS_OK;
             return retVal;
+        } else if (input.result==null) {
+            Result retVal = new Result();
+            retVal.result = null;
+            retVal.returnStatus = POStatus.STATUS_NULL;
+            return retVal;
         } else {
             throw new ExecException("Cannot dereference a bag from " + input.result.getClass().getName(), 1129);
         }

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=1125124&r1=1125123&r2=1125124&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java Thu May 19 21:28:03 2011
@@ -49,6 +49,7 @@ import org.apache.pig.impl.io.FileLocali
 import org.apache.pig.impl.logicalLayer.FrontendException;
 import org.apache.pig.impl.logicalLayer.schema.Schema;
 import org.apache.pig.impl.util.LogUtils;
+import org.apache.pig.impl.util.ObjectSerializer;
 import org.apache.pig.test.utils.Identity;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -1512,4 +1513,33 @@ public class TestEvalPipeline2 {
             Assert.assertTrue(e.getMessage().contains(ArrayList.class.getName()));
         }
     }
+    
+    // See PIG-2078
+    @Test
+    public void testProjectNullBag() throws Exception{
+        String[] input1 = {
+                "{(1)}\t2",
+                "\t3"
+        };
+        
+        HashSet<String> optimizerRules = new HashSet<String>();
+        optimizerRules.add("MergeForEach");
+        pigServer.getPigContext().getProperties().setProperty("pig.optimizer.rules", ObjectSerializer.serialize(optimizerRules));
+        
+        Util.createInputFile(cluster, "table_testProjectNullBag", input1);
+        pigServer.registerQuery("a = load 'table_testProjectNullBag' as (a0:bag{}, a1:int);");
+        pigServer.registerQuery("b = foreach a generate a0;");
+        
+        Iterator<Tuple> iter = pigServer.openIterator("b");
+        
+        Tuple t = iter.next();
+        Assert.assertTrue(t.toString().equals("({(1)})"));
+        
+        t = iter.next();
+        Assert.assertTrue(t.toString().equals("()"));
+        
+        Assert.assertFalse(iter.hasNext());
+        
+        pigServer.getPigContext().getProperties().remove("pig.optimizer.rules");
+    }
 }