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