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:17:45 UTC

svn commit: r1241151 - in /pig/trunk: 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:17:44 2012
New Revision: 1241151

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

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/newplan/logical/visitor/LineageFindRelVisitor.java
    pig/trunk/test/org/apache/pig/test/TestUnion.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1241151&r1=1241150&r2=1241151&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Mon Feb  6 20:17:44 2012
@@ -387,7 +387,13 @@ declaration (azaroth via gates)
 PIG-2019: smoketest-jar target has to depend on pigunit-jar to guarantee
 inclusion of test classes (cos via gates)
 
-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/trunk/src/org/apache/pig/newplan/logical/visitor/LineageFindRelVisitor.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/visitor/LineageFindRelVisitor.java?rev=1241151&r1=1241150&r2=1241151&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/visitor/LineageFindRelVisitor.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/visitor/LineageFindRelVisitor.java Mon Feb  6 20:17:44 2012
@@ -407,6 +407,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/trunk/test/org/apache/pig/test/TestUnion.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestUnion.java?rev=1241151&r1=1241150&r2=1241151&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestUnion.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestUnion.java Mon Feb  6 20:17:44 2012
@@ -29,11 +29,13 @@ 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.logicalLayer.schema.Schema;
 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;
@@ -261,5 +263,32 @@ public class TestUnion extends junit.fra
             assertTrue(expected[j].equals(results[j]));
         }
     }
+    
+    @Test
+    public void testCastingAfterUnion() throws Exception {
+
+        File f1 = Util.createInputFile("tmp", "i1.txt", new String[] {"aaa\t111"});
+        File f2 = Util.createInputFile("tmp", "i2.txt", new String[] {"bbb\t222"});
+
+        PigServer ps = new PigServer(ExecType.LOCAL, new Properties());
+        ps.registerQuery("A = load '" + f1.getAbsolutePath() + "' as (a,b);");
+        ps.registerQuery("B = load '" + f2.getAbsolutePath() + "' 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);
+
+    }
+
 
 }