You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by th...@apache.org on 2011/10/11 01:02:24 UTC
svn commit: r1181288 - in /pig/branches/branch-0.9: CHANGES.txt
src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POCast.java
test/org/apache/pig/test/TestPOCast.java
Author: thejas
Date: Mon Oct 10 23:02:23 2011
New Revision: 1181288
URL: http://svn.apache.org/viewvc?rev=1181288&view=rev
Log:
PIG-2271: PIG regression in BinStorage/PigStorage in 0.9.1
Modified:
pig/branches/branch-0.9/CHANGES.txt
pig/branches/branch-0.9/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POCast.java
pig/branches/branch-0.9/test/org/apache/pig/test/TestPOCast.java
Modified: pig/branches/branch-0.9/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/branches/branch-0.9/CHANGES.txt?rev=1181288&r1=1181287&r2=1181288&view=diff
==============================================================================
--- pig/branches/branch-0.9/CHANGES.txt (original)
+++ pig/branches/branch-0.9/CHANGES.txt Mon Oct 10 23:02:23 2011
@@ -40,6 +40,8 @@ PIG-2221: Couldnt find documentation for
BUG FIXES
+PIG-2271: PIG regression in BinStorage/PigStorage in 0.9.1 (thejas)
+
PIG-2307: Jetty version should be updated in .eclipse.templates/.classpath, pig-template.xml and pig.pom as well (zjshen via daijy)
PIG-2310: bin/pig fail when both pig-0.9.1.jar and pig.jar are in PIG_HOME (daijy)
Modified: pig/branches/branch-0.9/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POCast.java
URL: http://svn.apache.org/viewvc/pig/branches/branch-0.9/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POCast.java?rev=1181288&r1=1181287&r2=1181288&view=diff
==============================================================================
--- pig/branches/branch-0.9/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POCast.java (original)
+++ pig/branches/branch-0.9/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POCast.java Mon Oct 10 23:02:23 2011
@@ -20,7 +20,6 @@ package org.apache.pig.backend.hadoop.ex
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -34,9 +33,10 @@ import org.apache.pig.PigException;
import org.apache.pig.PigWarning;
import org.apache.pig.ResourceSchema;
import org.apache.pig.ResourceSchema.ResourceFieldSchema;
+import org.apache.pig.StreamToPig;
import org.apache.pig.backend.executionengine.ExecException;
-import org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.POStatus;
+import org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.Result;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.plans.PhyPlanVisitor;
import org.apache.pig.data.DataBag;
@@ -44,10 +44,9 @@ import org.apache.pig.data.DataByteArray
import org.apache.pig.data.DataType;
import org.apache.pig.data.Tuple;
import org.apache.pig.impl.PigContext;
-import org.apache.pig.impl.plan.OperatorKey;
import org.apache.pig.impl.plan.NodeIdGenerator;
+import org.apache.pig.impl.plan.OperatorKey;
import org.apache.pig.impl.plan.VisitorException;
-import org.apache.pig.StreamToPig;
import org.apache.pig.impl.util.CastUtils;
import org.apache.pig.impl.util.LogUtils;
@@ -831,9 +830,14 @@ public class POCast extends ExpressionOp
private Object convertWithSchema(Object obj, ResourceFieldSchema fs) throws IOException {
Object result = null;
- if (fs==null) {
+ if (fs == null) {
return obj;
}
+
+ if (obj == null) {
+ // handle DataType.NULL
+ return null;
+ }
switch (fs.getType()) {
case DataType.BAG:
Modified: pig/branches/branch-0.9/test/org/apache/pig/test/TestPOCast.java
URL: http://svn.apache.org/viewvc/pig/branches/branch-0.9/test/org/apache/pig/test/TestPOCast.java?rev=1181288&r1=1181287&r2=1181288&view=diff
==============================================================================
--- pig/branches/branch-0.9/test/org/apache/pig/test/TestPOCast.java (original)
+++ pig/branches/branch-0.9/test/org/apache/pig/test/TestPOCast.java Mon Oct 10 23:02:23 2011
@@ -18,24 +18,31 @@
package org.apache.pig.test;
import java.io.IOException;
-import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
+import junit.framework.TestCase;
+
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.InputFormat;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.RecordReader;
-import org.apache.pig.ExecType;
import org.apache.pig.FuncSpec;
import org.apache.pig.LoadCaster;
import org.apache.pig.LoadFunc;
import org.apache.pig.ResourceSchema;
import org.apache.pig.ResourceSchema.ResourceFieldSchema;
-import org.apache.pig.backend.datastorage.DataStorage;
import org.apache.pig.backend.executionengine.ExecException;
+import org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigSplit;
+import org.apache.pig.backend.hadoop.executionengine.physicalLayer.POStatus;
+import org.apache.pig.backend.hadoop.executionengine.physicalLayer.Result;
+import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POCast;
+import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POProject;
+import org.apache.pig.backend.hadoop.executionengine.physicalLayer.plans.PhysicalPlan;
+import org.apache.pig.builtin.BinStorage;
+import org.apache.pig.builtin.PigStorage;
import org.apache.pig.data.BagFactory;
import org.apache.pig.data.DataBag;
import org.apache.pig.data.DataByteArray;
@@ -44,25 +51,14 @@ import org.apache.pig.data.DefaultBagFac
import org.apache.pig.data.Tuple;
import org.apache.pig.data.TupleFactory;
import org.apache.pig.impl.io.BufferedPositionedInputStream;
-import org.apache.pig.impl.plan.OperatorKey;
-import org.apache.pig.impl.logicalLayer.FrontendException;
import org.apache.pig.impl.logicalLayer.schema.Schema;
-import org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigSplit;
-import org.apache.pig.backend.hadoop.executionengine.physicalLayer.POStatus;
-import org.apache.pig.backend.hadoop.executionengine.physicalLayer.Result;
-import org.apache.pig.backend.hadoop.executionengine.physicalLayer.plans.PhysicalPlan;
-import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POCast;
-import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POProject;
+import org.apache.pig.impl.plan.OperatorKey;
import org.apache.pig.impl.plan.PlanException;
import org.apache.pig.impl.util.Utils;
import org.apache.pig.parser.ParserException;
import org.apache.pig.test.utils.GenRandomData;
-import org.apache.pig.builtin.PigStorage;
-import org.apache.pig.builtin.BinStorage;
import org.junit.Test;
-import junit.framework.TestCase;
-
public class TestPOCast extends TestCase {
Random r = new Random();
@@ -1483,9 +1479,46 @@ public class TestPOCast extends TestCase
assertTrue(res.result==null);
}
+
+ {
+ //positive test case
+ Tuple t = tf.newTuple();
+ Tuple wrappedTuple = tf.newTuple();
+ wrappedTuple.append(GenRandomData.genRandString(r));
+ wrappedTuple.append(GenRandomData.genRandString(r));
+ t.append(wrappedTuple);
+ Schema s = Utils.getSchemaFromString("t:tuple(a:chararray, b:chararray)");
+ op.setFieldSchema(new ResourceSchema.ResourceFieldSchema(s.getField(0)));
+ plan.attachInput(t);
+ Tuple tup = null;
+ Result res = op.getNext(tup);
+ verifyResult(res, POStatus.STATUS_OK, wrappedTuple);
+ }
+
+ {
+ //test case trying with null inside tuple
+ Tuple t = tf.newTuple();
+ Tuple wrappedTuple = tf.newTuple();
+ wrappedTuple.append(GenRandomData.genRandString(r));
+ wrappedTuple.append(null);//NULL col inside tuple
+ t.append(wrappedTuple);
+ Schema s = Utils.getSchemaFromString("t:tuple(a:chararray, b:chararray)");
+ op.setFieldSchema(new ResourceSchema.ResourceFieldSchema(s.getField(0)));
+ plan.attachInput(t);
+ Tuple tup = null;
+ Result res = op.getNext(tup);
+ verifyResult(res, POStatus.STATUS_OK, wrappedTuple);
+ }
+
+
}
- @Test
+ private void verifyResult(Result res, byte status, Object result) {
+ assertEquals("result status", status, res.returnStatus);
+ assertEquals("result value", result, res.result);
+ }
+
+ @Test
public void testBagToOther() throws IOException, ParserException {
POCast op = new POCast(new OperatorKey("", r.nextLong()), -1);
op.setFuncSpec(new FuncSpec(PigStorage.class.getName()));
@@ -1595,7 +1628,7 @@ public class TestPOCast extends TestCase
{
Tuple t = tf.newTuple();
- t.append(GenRandomData.genRandSmallTupDataBag(r, 1, 100));
+ t.append(GenRandomData.genRandSmallTupDataBagWithNulls(r, 20, 100));
Schema s = Utils.getSchemaFromString("b:bag{t:tuple(a:chararray, b:float)}");
op.setFieldSchema(new ResourceSchema.ResourceFieldSchema(s.getField(0)));
plan.attachInput(t);
@@ -1607,16 +1640,22 @@ public class TestPOCast extends TestCase
while(expectedBagIterator.hasNext()) {
Tuple expectedBagTuple = expectedBagIterator.next();
Tuple convertedBagTuple = convertedBagIterator.next();
- assertTrue(convertedBagTuple.get(0) instanceof String);
- assertTrue(convertedBagTuple.get(1) instanceof Float);
- assertTrue(expectedBagTuple.get(0).equals(convertedBagTuple.get(0)));
- assertTrue(((Float)(expectedBagTuple.get(1))).floatValue()==(Float)(convertedBagTuple.get(1)));
+ if(expectedBagTuple.get(0) != null){
+ assertTrue(convertedBagTuple.get(0) instanceof String);
+ assertTrue(expectedBagTuple.get(0).equals(convertedBagTuple.get(0)));
+ }
+ if(expectedBagTuple.get(1) != null){
+ assertTrue(convertedBagTuple.get(1) instanceof Float);
+ assertTrue(((Float)(expectedBagTuple.get(1))).floatValue()==(Float)(convertedBagTuple.get(1)));
+ }
+
+
}
}
{
Tuple t = tf.newTuple();
- t.append(GenRandomData.genRandSmallTupDataBag(r, 1, 100));
+ t.append(GenRandomData.genRandSmallTupDataBagWithNulls(r, 20, 100));
Schema s = Utils.getSchemaFromString("b:bag{}");
op.setFieldSchema(new ResourceSchema.ResourceFieldSchema(s.getField(0)));
plan.attachInput(t);
@@ -1628,10 +1667,17 @@ public class TestPOCast extends TestCase
while(expectedBagIterator.hasNext()) {
Tuple expectedBagTuple = expectedBagIterator.next();
Tuple convertedBagTuple = convertedBagIterator.next();
- assertTrue(convertedBagTuple.get(0) instanceof String);
- assertTrue(convertedBagTuple.get(1) instanceof Integer);
- assertTrue(expectedBagTuple.get(0).equals(convertedBagTuple.get(0)));
- assertTrue(((Integer)(expectedBagTuple.get(1)))==(Integer)(convertedBagTuple.get(1)));
+
+ if(expectedBagTuple.get(0) != null){
+ assertTrue(convertedBagTuple.get(0) instanceof String);
+ assertTrue(expectedBagTuple.get(0).equals(convertedBagTuple.get(0)));
+ }
+
+ if(expectedBagTuple.get(1) != null){
+ assertTrue(convertedBagTuple.get(1) instanceof Integer);
+ assertTrue(((Integer)(expectedBagTuple.get(1)))==(Integer)(convertedBagTuple.get(1)));
+ }
+
}
}
}