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/10/01 19:53:10 UTC

svn commit: r1528160 - in /pig/trunk: CHANGES.txt src/org/apache/pig/newplan/logical/relational/LOCross.java test/org/apache/pig/test/TestEvalPipelineLocal.java

Author: daijy
Date: Tue Oct  1 17:53:10 2013
New Revision: 1528160

URL: http://svn.apache.org/r1528160
Log:
PIG-3292: Logical plan invalid state: duplicate uid in schema during self-join to get cross product

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/newplan/logical/relational/LOCross.java
    pig/trunk/test/org/apache/pig/test/TestEvalPipelineLocal.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1528160&r1=1528159&r2=1528160&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Tue Oct  1 17:53:10 2013
@@ -256,6 +256,8 @@ PIG-3013: BinInterSedes improve chararra
 
 BUG FIXES
 
+PIG-3292: Logical plan invalid state: duplicate uid in schema during self-join to get cross product (cheolsoo via daijy)
+
 PIG-3491: Fix e2e failure Jython_Diagnostics_4 (daijy)
 
 PIG-3434: Null subexpression in bincond nullifies outer tuple (or bag) (mwagner via daijy)

Modified: pig/trunk/src/org/apache/pig/newplan/logical/relational/LOCross.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/relational/LOCross.java?rev=1528160&r1=1528159&r2=1528160&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/relational/LOCross.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/relational/LOCross.java Tue Oct  1 17:53:10 2013
@@ -78,6 +78,10 @@ public class LOCross extends LogicalRela
             }            
         }        
 
+        if (nested) {
+            LogicalRelationalOperator.fixDuplicateUids(fss);
+        }
+
         schema = new LogicalSchema();
         for(LogicalSchema.LogicalFieldSchema fieldSchema: fss) {
             schema.addField(fieldSchema);

Modified: pig/trunk/test/org/apache/pig/test/TestEvalPipelineLocal.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestEvalPipelineLocal.java?rev=1528160&r1=1528159&r2=1528160&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestEvalPipelineLocal.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestEvalPipelineLocal.java Tue Oct  1 17:53:10 2013
@@ -24,6 +24,7 @@ import java.io.IOException;
 import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -1145,4 +1146,31 @@ public class TestEvalPipelineLocal {
         Assert.assertTrue(iter.next().toString().equals("(NASDAQ)"));
         Assert.assertFalse(iter.hasNext());
     }
+    
+    // Self cross, see PIG-3292
+    @Test
+    public void testSelfCross() throws Exception{
+        File f1 = createFile(new String[]{"1\t2", "1\t3"});
+        
+        pigServer.registerQuery("a = load '" + Util.encodeEscape(Util.generateURI(f1.toString(), pigServer.getPigContext()))
+                + "' as (key, x);");
+        pigServer.registerQuery("a_group = group a by key;");
+        pigServer.registerQuery("b = foreach a_group {y = a.x;pair = cross a.x, y;"
+                + "generate flatten(pair);}");
+        
+        Iterator<Tuple> iter = pigServer.openIterator("b");
+        
+        Collection<String> results = new HashSet<String>();
+        results.add("(3,3)");
+        results.add("(2,2)");
+        results.add("(3,2)");
+        results.add("(2,3)");
+        
+        Assert.assertTrue(results.contains(iter.next().toString()));
+        Assert.assertTrue(results.contains(iter.next().toString()));
+        Assert.assertTrue(results.contains(iter.next().toString()));
+        Assert.assertTrue(results.contains(iter.next().toString()));
+        
+        Assert.assertFalse(iter.hasNext());
+    }
 }