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;
}