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 2012/02/06 21:13:55 UTC

svn commit: r1241147 - in /pig/branches/branch-0.9: CHANGES.txt src/org/apache/pig/newplan/logical/visitor/LineageFindRelVisitor.java test/org/apache/pig/test/TestUnion.java

Author: daijy
Date: Mon Feb  6 20:13:55 2012
New Revision: 1241147

URL: http://svn.apache.org/viewvc?rev=1241147&view=rev
Log:
PIG-2493: UNION causes casting issues

Modified:
    pig/branches/branch-0.9/CHANGES.txt
    pig/branches/branch-0.9/src/org/apache/pig/newplan/logical/visitor/LineageFindRelVisitor.java
    pig/branches/branch-0.9/test/org/apache/pig/test/TestUnion.java

Modified: pig/branches/branch-0.9/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/branches/branch-0.9/CHANGES.txt?rev=1241147&r1=1241146&r2=1241147&view=diff
==============================================================================
--- pig/branches/branch-0.9/CHANGES.txt (original)
+++ pig/branches/branch-0.9/CHANGES.txt Mon Feb  6 20:13:55 2012
@@ -18,7 +18,13 @@
 
 Pig Change Log
 
-Release 0.9.2 - Unreleased
+Release 0.9.3 - Unreleased
+
+BUG FIXES
+
+PIG-2493: UNION causes casting issues (vivekp via daijy)
+
+Release 0.9.2
 
 IMPROVEMENTS
 

Modified: pig/branches/branch-0.9/src/org/apache/pig/newplan/logical/visitor/LineageFindRelVisitor.java
URL: http://svn.apache.org/viewvc/pig/branches/branch-0.9/src/org/apache/pig/newplan/logical/visitor/LineageFindRelVisitor.java?rev=1241147&r1=1241146&r2=1241147&view=diff
==============================================================================
--- pig/branches/branch-0.9/src/org/apache/pig/newplan/logical/visitor/LineageFindRelVisitor.java (original)
+++ pig/branches/branch-0.9/src/org/apache/pig/newplan/logical/visitor/LineageFindRelVisitor.java Mon Feb  6 20:13:55 2012
@@ -405,6 +405,14 @@ public class LineageFindRelVisitor exten
     @Override
     public void visit(LOUnion relOp) throws FrontendException{
         mapToPredLoadFunc(relOp);
+        
+        // Since the uid changes for Union, add mappings for new uids to funcspec
+        LogicalSchema schema = relOp.getSchema();
+        if(schema != null){
+            for (LogicalFieldSchema logicalFieldSchema : schema.getFields()) {
+                addUidLoadFuncToMap(logicalFieldSchema.uid,rel2InputFuncMap.get(relOp));
+            }
+        }
     }
     
     @Override

Modified: pig/branches/branch-0.9/test/org/apache/pig/test/TestUnion.java
URL: http://svn.apache.org/viewvc/pig/branches/branch-0.9/test/org/apache/pig/test/TestUnion.java?rev=1241147&r1=1241146&r2=1241147&view=diff
==============================================================================
--- pig/branches/branch-0.9/test/org/apache/pig/test/TestUnion.java (original)
+++ pig/branches/branch-0.9/test/org/apache/pig/test/TestUnion.java Mon Feb  6 20:13:55 2012
@@ -30,12 +30,14 @@ import org.apache.pig.backend.executione
 import org.apache.pig.builtin.PigStorage;
 import org.apache.pig.data.DataBag;
 import org.apache.pig.data.DataByteArray;
+import org.apache.pig.data.DataType;
 import org.apache.pig.data.DefaultBagFactory;
 import org.apache.pig.data.DefaultTuple;
 import org.apache.pig.data.Tuple;
 import org.apache.pig.impl.PigContext;
 import org.apache.pig.impl.io.FileSpec;
 import org.apache.pig.impl.io.FileLocalizer;
+import org.apache.pig.impl.logicalLayer.schema.Schema;
 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.Result;
@@ -263,4 +265,31 @@ public class TestUnion extends junit.fra
         }
     }
     
+    @Test
+    public void testCastingAfterUnion() throws Exception {
+
+        Util.createInputFile(cluster, "i1.txt", new String[] {"aaa\t111"});
+        Util.createInputFile(cluster, "i2.txt", new String[] {"bbb\t222"});
+        
+
+        PigServer ps = new PigServer(ExecType.MAPREDUCE, cluster.getProperties());
+        ps.registerQuery("A = load 'i1.txt' as (a,b);");
+        ps.registerQuery("B = load 'i2.txt' as (a,b);");
+        ps.registerQuery("C = union A,B;");
+        ps.registerQuery("D = foreach C generate (chararray)a as a,(int)b as b;");
+        
+        Schema dumpSchema = ps.dumpSchema("D");
+        Schema expected = new Schema ();
+        expected.add(new Schema.FieldSchema("a", DataType.CHARARRAY));
+        expected.add(new Schema.FieldSchema("b", DataType.INTEGER));
+        assertEquals(expected, dumpSchema);
+        
+        Iterator<Tuple> itr = ps.openIterator("D");
+        int recordCount = 0;
+        while(itr.next() != null)
+            ++recordCount;
+        assertEquals(2, recordCount);
+
+    }
+    
 }