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 2011/04/15 02:25:00 UTC

svn commit: r1092550 - in /pig/trunk: CHANGES.txt src/org/apache/pig/newplan/logical/expression/DereferenceExpression.java test/org/apache/pig/test/TestEvalPipeline2.java

Author: daijy
Date: Fri Apr 15 00:25:00 2011
New Revision: 1092550

URL: http://svn.apache.org/viewvc?rev=1092550&view=rev
Log:
PIG-1979: New logical plan failing with ERROR 2229: Couldn't find matching uid -1

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/newplan/logical/expression/DereferenceExpression.java
    pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1092550&r1=1092549&r2=1092550&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Fri Apr 15 00:25:00 2011
@@ -147,6 +147,8 @@ PIG-1696: Performance: Use System.arrayc
 
 BUG FIXES
 
+PIG-1979: New logical plan failing with ERROR 2229: Couldn't find matching uid -1 (daijy)
+
 PIG-1897: multiple star projection in a statement does not produce 
  the right plan (thejas)
 

Modified: pig/trunk/src/org/apache/pig/newplan/logical/expression/DereferenceExpression.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/expression/DereferenceExpression.java?rev=1092550&r1=1092549&r2=1092550&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/expression/DereferenceExpression.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/expression/DereferenceExpression.java Fri Apr 15 00:25:00 2011
@@ -158,6 +158,7 @@ public class DereferenceExpression exten
                 bagSchema.addField(new LogicalSchema.LogicalFieldSchema(null, innerSchema, DataType.TUPLE, 
                         LogicalExpression.getNextUid()));
                 fieldSchema = new LogicalSchema.LogicalFieldSchema(null, bagSchema, DataType.BAG, LogicalExpression.getNextUid());
+                uidOnlyFieldSchema = fieldSchema.mergeUid(uidOnlyFieldSchema);
             }
             else { // Dereference a field out of a tuple
                 if (predFS.schema!=null) {
@@ -167,6 +168,7 @@ public class DereferenceExpression exten
                     fieldSchema = predFS.schema.getField(columns.get(0));
                 } else{
                     fieldSchema = new LogicalFieldSchema(null, null, DataType.BYTEARRAY);
+                    uidOnlyFieldSchema = fieldSchema.mergeUid(uidOnlyFieldSchema);
                 }
             }
         }

Modified: pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java?rev=1092550&r1=1092549&r2=1092550&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestEvalPipeline2.java Fri Apr 15 00:25:00 2011
@@ -1459,5 +1459,29 @@ public class TestEvalPipeline2 {
         Assert.assertFalse(iter.hasNext());
     }
     
-    
+    // See PIG-1979
+    @Test
+    public void testDereferenceUidBug() throws Exception{
+        String[] input1 = {
+                "0\t0\t{(1,2)}\t1",
+        };
+        String[] input2 = {
+                "0\t0",
+        };
+        
+        Util.createInputFile(cluster, "table_testDereferenceUidBug1", input1);
+        Util.createInputFile(cluster, "table_testDereferenceUidBug2", input2);
+        pigServer.registerQuery("a = load 'table_testDereferenceUidBug1' as (a0:int, a1:int, a2:{t:(i0:int, i1:int)}, a3:int);");
+        pigServer.registerQuery("b = foreach a generate a0, a1, a0+a1 as sum, a2.i0 as a2, a3;");
+        pigServer.registerQuery("c = filter b by sum==0;");
+        pigServer.registerQuery("d = load 'table_testDereferenceUidBug2' as (d0:int, d1:int);");
+        pigServer.registerQuery("e = join c by a0, d by d0;");
+        pigServer.registerQuery("f = foreach e generate c::a2;");
+        
+        Iterator<Tuple> iter = pigServer.openIterator("f");
+        
+        Tuple t = iter.next();
+        Assert.assertTrue(t.toString().equals("({(1)})"));
+        Assert.assertFalse(iter.hasNext());
+    }    
 }