You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by ol...@apache.org on 2008/09/18 23:34:33 UTC

svn commit: r696824 - in /incubator/pig/branches/types: CHANGES.txt src/org/apache/pig/impl/logicalLayer/LOForEach.java test/org/apache/pig/test/TestLogicalPlanBuilder.java

Author: olga
Date: Thu Sep 18 14:34:33 2008
New Revision: 696824

URL: http://svn.apache.org/viewvc?rev=696824&view=rev
Log:
PIG-436: When a single column is flattened, the alias is lost in subsequent statements that refer to the alias

Modified:
    incubator/pig/branches/types/CHANGES.txt
    incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/LOForEach.java
    incubator/pig/branches/types/test/org/apache/pig/test/TestLogicalPlanBuilder.java

Modified: incubator/pig/branches/types/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/pig/branches/types/CHANGES.txt?rev=696824&r1=696823&r2=696824&view=diff
==============================================================================
--- incubator/pig/branches/types/CHANGES.txt (original)
+++ incubator/pig/branches/types/CHANGES.txt Thu Sep 18 14:34:33 2008
@@ -202,6 +202,12 @@
 
     PIG-434: short-circuit AND and OR (pradeepk viia olgan)
 
-    PIG-333: allowing no parethesis with single column alias with flatten
+    PIG-333: allowing no parethesis with single column alias with flatten (sms
+    via olgan)
+
+    PIG-426: Adding result of two UDFs gives a syntax error (sms via olgan)
+
+    PIG-436: alias is lost when single column is flattened (pradeepk via
+    olgan)
+
 
-    PIG-426: Adding result of two UDFs gives a syntax error

Modified: incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/LOForEach.java
URL: http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/LOForEach.java?rev=696824&r1=696823&r2=696824&view=diff
==============================================================================
--- incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/LOForEach.java (original)
+++ incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/LOForEach.java Thu Sep 18 14:34:33 2008
@@ -325,6 +325,9 @@
 				log.debug("alias: " + alias);
 				if((null != alias) && (count == 1)) {
 					mSchema.addAlias(alias, fs);
+					// alias is unambiguous - so set it
+					// as the alias in the field schema
+					fs.alias = alias;
 				}
 			}
             mIsSchemaComputed = true;

Modified: incubator/pig/branches/types/test/org/apache/pig/test/TestLogicalPlanBuilder.java
URL: http://svn.apache.org/viewvc/incubator/pig/branches/types/test/org/apache/pig/test/TestLogicalPlanBuilder.java?rev=696824&r1=696823&r2=696824&view=diff
==============================================================================
--- incubator/pig/branches/types/test/org/apache/pig/test/TestLogicalPlanBuilder.java (original)
+++ incubator/pig/branches/types/test/org/apache/pig/test/TestLogicalPlanBuilder.java Thu Sep 18 14:34:33 2008
@@ -1273,7 +1273,7 @@
             assertTrue(e.getMessage().contains("Schema size mismatch"));
         }
     }
-
+        
     @Test
     public void testQuery91() {
         buildPlan("a = load 'myfile' as (name:Chararray, age:Int, gpa:Float);");
@@ -1293,6 +1293,58 @@
         + "};";
     }
 
+    @Test
+    public void testQuery93() throws FrontendException, ParseException {
+        buildPlan("a = load 'one' as (name, age, gpa);");
+        buildPlan("b = group a by name;");
+        buildPlan("c = foreach b generate flatten(a);");
+        buildPlan("d = foreach c generate name;");
+        // test that we can refer to "name" field and not a::name
+        buildPlan("e = foreach d generate name;");
+    }
+    
+    @Test
+    public void testQueryFail93() throws FrontendException, ParseException {
+        buildPlan("a = load 'one' as (name, age, gpa);");
+        buildPlan("b = group a by name;");
+        buildPlan("c = foreach b generate flatten(a);");
+        buildPlan("d = foreach c generate name;");
+        // test that we can refer to "name" field and not a::name
+        try {
+            buildPlan("e = foreach d generate a::name;");
+        } catch (AssertionFailedError e) {
+            assertTrue(e.getMessage().contains("Invalid alias: a::name in {name: bytearray}"));
+        }
+    }
+    
+    @Test
+    public void testQuery94() throws FrontendException, ParseException {
+        buildPlan("a = load 'one' as (name, age, gpa);");
+        buildPlan("b = load 'two' as (name, age, somethingelse);");
+        buildPlan("c = cogroup a by name, b by name;");
+        buildPlan("d = foreach c generate flatten(a), flatten(b);");
+        // test that we can refer to "a::name" field and not name
+        // test that we can refer to "b::name" field and not name
+        buildPlan("e = foreach d generate a::name, b::name;");
+        // test that we can refer to gpa and somethingelse
+        buildPlan("f = foreach d generate gpa, somethingelse, a::gpa, b::somethingelse;");
+        
+    }
+    
+    @Test
+    public void testQueryFail94() throws FrontendException, ParseException {
+        buildPlan("a = load 'one' as (name, age, gpa);");
+        buildPlan("b = load 'two' as (name, age, somethingelse);");
+        buildPlan("c = cogroup a by name, b by name;");
+        buildPlan("d = foreach c generate flatten(a), flatten(b);");
+        // test that we can refer to "a::name" field and not name
+        try {
+            buildPlan("e = foreach d generate name;");
+        } catch (AssertionFailedError e) {
+            assertTrue(e.getMessage().contains("Invalid alias: name in {a::name: bytearray"));
+        }
+    }
+
     private Schema getSchemaFromString(String schemaString) throws ParseException {
         return getSchemaFromString(schemaString, DataType.BYTEARRAY);
     }