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 2013/05/30 20:54:45 UTC

svn commit: r1487972 - in /pig/trunk: CHANGES.txt src/org/apache/pig/newplan/logical/relational/LOSplitOutput.java

Author: daijy
Date: Thu May 30 18:54:44 2013
New Revision: 1487972

URL: http://svn.apache.org/r1487972
Log:
PIG-3310: ImplicitSplitInserter does not generate new uids for nested schema fields, leading to miscomputations

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/newplan/logical/relational/LOSplitOutput.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1487972&r1=1487971&r2=1487972&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Thu May 30 18:54:44 2013
@@ -192,6 +192,8 @@ PIG-3013: BinInterSedes improve chararra
 
 BUG FIXES
 
+PIG-3310: ImplicitSplitInserter does not generate new uids for nested schema fields, leading to miscomputations (cstenac via daijy)
+
 PIG-3334: Fix Windows piggybank unit test failures (daijy)
 
 PIG-3337: Fix remaining Window e2e tests (daijy)

Modified: pig/trunk/src/org/apache/pig/newplan/logical/relational/LOSplitOutput.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/relational/LOSplitOutput.java?rev=1487972&r1=1487971&r2=1487972&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/relational/LOSplitOutput.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/relational/LOSplitOutput.java Thu May 30 18:54:44 2013
@@ -23,6 +23,7 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.pig.data.DataType;
 import org.apache.pig.impl.logicalLayer.FrontendException;
 import org.apache.pig.impl.util.Pair;
 import org.apache.pig.newplan.Operator;
@@ -51,6 +52,23 @@ public class LOSplitOutput extends Logic
         this.filterPlan = filterPlan;
     }
     
+    private void reassignUidRec(LogicalSchema schema) {
+        for (LogicalFieldSchema fs : schema.getFields()) {
+            /* If one of the field contains a nested schema, we need to reassign Uids on the nested fields too */
+            if (fs.schema != null && (fs.type == DataType.TUPLE || fs.type == DataType.BAG || fs.type == DataType.MAP)) {
+                reassignUidRec(fs.schema);
+            }
+            if (uidMapping.containsKey(fs.uid)) {
+                fs.uid = uidMapping.get(fs.uid);
+            }
+            else {
+                long predUid = fs.uid;
+                fs.uid = LogicalExpression.getNextUid();
+                uidMapping.put(predUid, fs.uid);
+            }
+        }
+    }
+    
     @Override
     public LogicalSchema getSchema() throws FrontendException {
         if (schema!=null)
@@ -61,16 +79,7 @@ public class LOSplitOutput extends Logic
         
         if (input.getSchema()!=null) {
             schema = input.getSchema().deepCopy();
-            for (LogicalFieldSchema fs : schema.getFields()) {
-                if (uidMapping.containsKey(fs.uid)) {
-                    fs.uid = uidMapping.get(fs.uid);
-                }
-                else {
-                    long predUid = fs.uid;
-                    fs.uid = LogicalExpression.getNextUid();
-                    uidMapping.put(predUid, fs.uid);
-                }
-            }
+            reassignUidRec(schema);
         }
         return schema;
     }