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/01/24 19:26:43 UTC
svn commit: r1062911 - in /pig/trunk: ./
src/org/apache/pig/newplan/logical/expression/
src/org/apache/pig/newplan/logical/relational/
src/org/apache/pig/newplan/logical/rules/ test/org/apache/pig/test/
Author: daijy
Date: Mon Jan 24 18:26:43 2011
New Revision: 1062911
URL: http://svn.apache.org/viewvc?rev=1062911&view=rev
Log:
PIG-767: Schema reported from DESCRIBE and actual schema of inner bags are different
Modified:
pig/trunk/CHANGES.txt
pig/trunk/src/org/apache/pig/newplan/logical/expression/DereferenceExpression.java
pig/trunk/src/org/apache/pig/newplan/logical/relational/LOCogroup.java
pig/trunk/src/org/apache/pig/newplan/logical/relational/LOGenerate.java
pig/trunk/src/org/apache/pig/newplan/logical/relational/LOInnerLoad.java
pig/trunk/src/org/apache/pig/newplan/logical/rules/DuplicateForEachColumnRewrite.java
pig/trunk/test/org/apache/pig/test/TestLogicalPlanMigrationVisitor.java
pig/trunk/test/org/apache/pig/test/TestNewPlanLogToPhyTranslationVisitor.java
pig/trunk/test/org/apache/pig/test/TestPigServer.java
pig/trunk/test/org/apache/pig/test/TestSchema.java
Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1062911&r1=1062910&r2=1062911&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Mon Jan 24 18:26:43 2011
@@ -86,6 +86,8 @@ PIG-1696: Performance: Use System.arrayc
BUG FIXES
+PIG-767: Schema reported from DESCRIBE and actual schema of inner bags are different (daijy)
+
PIG-1801: Need better error message for Jython errors (rding)
PIG-1742: org.apache.pig.newplan.optimizer.Rule.java does not work
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=1062911&r1=1062910&r2=1062911&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 Mon Jan 24 18:26:43 2011
@@ -135,25 +135,24 @@ public class DereferenceExpression exten
LogicalExpression successor = (LogicalExpression)plan.getSuccessors(this).get(0);
LogicalFieldSchema predFS = successor.getFieldSchema();
if (predFS!=null) {
- if (columns.size()>1 || predFS.type==DataType.BAG) {
+ if (predFS.type==DataType.BAG) {
LogicalSchema innerSchema = null;
if (predFS.schema!=null) {
innerSchema = new LogicalSchema();
- LogicalSchema realSchema;
- if (predFS.schema.isTwoLevelAccessRequired()) {
- realSchema = predFS.schema.getField(0).schema;
- }
- else {
- realSchema = predFS.schema;
- }
- if (realSchema!=null) {
+ // Get the tuple inner schema
+ LogicalSchema origSchema = predFS.schema.getField(0).schema;;
+ // Slice the tuple inner schema
+ if (origSchema!=null) {
for (int column:columns) {
- innerSchema.addField(realSchema.getField(column));
+ innerSchema.addField(origSchema.getField(column));
}
}
}
- fieldSchema = new LogicalSchema.LogicalFieldSchema(null, innerSchema, predFS.type,
- LogicalExpression.getNextUid());
+ LogicalSchema bagSchema = new LogicalSchema();
+ bagSchema.setTwoLevelAccessRequired(true);
+ bagSchema.addField(new LogicalSchema.LogicalFieldSchema(null, innerSchema, DataType.TUPLE,
+ LogicalExpression.getNextUid()));
+ fieldSchema = new LogicalSchema.LogicalFieldSchema(null, bagSchema, DataType.BAG, LogicalExpression.getNextUid());
}
else { // Dereference a field out of a tuple
if (predFS.schema!=null)
Modified: pig/trunk/src/org/apache/pig/newplan/logical/relational/LOCogroup.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/relational/LOCogroup.java?rev=1062911&r1=1062910&r2=1062911&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/relational/LOCogroup.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/relational/LOCogroup.java Mon Jan 24 18:26:43 2011
@@ -195,11 +195,18 @@ public class LOCogroup extends LogicalRe
generatedInputUids.put( counter, bagUid );
}
- LogicalFieldSchema newBagSchema = new LogicalFieldSchema(
- ((LogicalRelationalOperator)op).getAlias(), inputSchema,
+ LogicalFieldSchema newTupleFieldSchema = new LogicalFieldSchema(
+ null, inputSchema, DataType.TUPLE, LogicalExpression.getNextUid());
+
+ LogicalSchema bagSchema = new LogicalSchema();
+ bagSchema.addField(newTupleFieldSchema);
+ bagSchema.setTwoLevelAccessRequired(true);
+
+ LogicalFieldSchema newBagFieldSchema = new LogicalFieldSchema(
+ ((LogicalRelationalOperator)op).getAlias(), bagSchema,
DataType.BAG, bagUid);
- fieldSchemaList.add( newBagSchema );
+ fieldSchemaList.add( newBagFieldSchema );
counter ++;
}
Modified: pig/trunk/src/org/apache/pig/newplan/logical/relational/LOGenerate.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/relational/LOGenerate.java?rev=1062911&r1=1062910&r2=1062911&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/relational/LOGenerate.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/relational/LOGenerate.java Mon Jan 24 18:26:43 2011
@@ -109,9 +109,11 @@ public class LOGenerate extends LogicalR
if (fieldSchema.schema!=null) {
if (fieldSchema.schema.isTwoLevelAccessRequired()) {
// assert(fieldSchema.schema.size() == 1 && fieldSchema.schema.getField(0).type == DataType.TUPLE)
- innerFieldSchemas = fieldSchema.schema.getField(0).schema.getFields();
+ if (fieldSchema.schema!=null && fieldSchema.schema.getField(0).schema!=null)
+ innerFieldSchemas = fieldSchema.schema.getField(0).schema.getFields();
} else {
- innerFieldSchemas = fieldSchema.schema.getFields();
+ if (fieldSchema.schema!=null)
+ innerFieldSchemas = fieldSchema.schema.getFields();
}
for (LogicalSchema.LogicalFieldSchema fs : innerFieldSchemas) {
fs.alias = fieldSchema.alias + "::" + fs.alias;
Modified: pig/trunk/src/org/apache/pig/newplan/logical/relational/LOInnerLoad.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/relational/LOInnerLoad.java?rev=1062911&r1=1062910&r2=1062911&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/relational/LOInnerLoad.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/relational/LOInnerLoad.java Mon Jan 24 18:26:43 2011
@@ -70,12 +70,14 @@ public class LOInnerLoad extends Logical
if (prj.getFieldSchema()!=null) {
if (prj.getFieldSchema().type==DataType.BAG && prj.getFieldSchema().schema!=null &&
prj.getFieldSchema().schema.isTwoLevelAccessRequired()) {
- schema = new LogicalSchema();
LogicalFieldSchema tupleSchema = prj.getFieldSchema().schema.getField(0);
- for (int i=0;i<tupleSchema.schema.size();i++)
- schema.addField(tupleSchema.schema.getField(i));
+ if (tupleSchema!=null && tupleSchema.schema!=null) {
+ schema = new LogicalSchema();
+ for (int i=0;i<tupleSchema.schema.size();i++)
+ schema.addField(tupleSchema.schema.getField(i));
+ alias = prj.getFieldSchema().alias;
+ }
sourceIsBag = true;
- alias = prj.getFieldSchema().alias;
}
else if (prj.getFieldSchema().type==DataType.BAG){
sourceIsBag = true;
Modified: pig/trunk/src/org/apache/pig/newplan/logical/rules/DuplicateForEachColumnRewrite.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/rules/DuplicateForEachColumnRewrite.java?rev=1062911&r1=1062910&r2=1062911&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/rules/DuplicateForEachColumnRewrite.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/rules/DuplicateForEachColumnRewrite.java Mon Jan 24 18:26:43 2011
@@ -102,9 +102,11 @@ public class DuplicateForEachColumnRewri
if (exp.getFieldSchema().schema!=null) {
if (exp.getFieldSchema().schema.isTwoLevelAccessRequired()) {
// assert(fieldSchema.schema.size() == 1 && fieldSchema.schema.getField(0).type == DataType.TUPLE)
- innerFieldSchemas = exp.getFieldSchema().schema.getField(0).schema.getFields();
+ if (exp.getFieldSchema().schema.getField(0).schema!=null)
+ innerFieldSchemas = exp.getFieldSchema().schema.getField(0).schema.getFields();
} else {
- innerFieldSchemas = exp.getFieldSchema().schema.getFields();
+ if (exp.getFieldSchema().schema!=null)
+ innerFieldSchemas = exp.getFieldSchema().schema.getFields();
}
}
}
Modified: pig/trunk/test/org/apache/pig/test/TestLogicalPlanMigrationVisitor.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestLogicalPlanMigrationVisitor.java?rev=1062911&r1=1062910&r2=1062911&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestLogicalPlanMigrationVisitor.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestLogicalPlanMigrationVisitor.java Mon Jan 24 18:26:43 2011
@@ -421,18 +421,19 @@ public class TestLogicalPlanMigrationVis
assertEquals( false, uids.contains( schema.getField(0).uid ) );
assertEquals( 0, schema.getField(0).alias.compareTo("group") );
-
assertEquals( DataType.BAG, schema.getField(1).type );
+ LogicalSchema bagSchema = schema.getField(1).schema;
+ LogicalSchema tupleSchema = bagSchema.getField(0).schema;
- assertEquals( DataType.CHARARRAY, schema.getField(1).schema.getField(0).type );
- assertEquals( 0, schema.getField(1).schema.getField(0).alias.compareTo("name") );
- assertEquals( loadSchema.getField(0).uid, schema.getField(1).schema.getField(0).uid );
- assertEquals( DataType.INTEGER, schema.getField(1).schema.getField(1).type );
- assertEquals( 0, schema.getField(1).schema.getField(1).alias.compareTo("age") );
- assertEquals( loadSchema.getField(1).uid, schema.getField(1).schema.getField(1).uid );
- assertEquals( DataType.FLOAT, schema.getField(1).schema.getField(2).type );
- assertEquals( 0, schema.getField(1).schema.getField(2).alias.compareTo("gpa") );
- assertEquals( loadSchema.getField(2).uid, schema.getField(1).schema.getField(2).uid );
+ assertEquals( DataType.CHARARRAY, tupleSchema.getField(0).type );
+ assertEquals( 0, tupleSchema.getField(0).alias.compareTo("name") );
+ assertEquals( loadSchema.getField(0).uid, tupleSchema.getField(0).uid );
+ assertEquals( DataType.INTEGER, tupleSchema.getField(1).type );
+ assertEquals( 0, tupleSchema.getField(1).alias.compareTo("age") );
+ assertEquals( loadSchema.getField(1).uid, tupleSchema.getField(1).uid );
+ assertEquals( DataType.FLOAT, tupleSchema.getField(2).type );
+ assertEquals( 0, tupleSchema.getField(2).alias.compareTo("gpa") );
+ assertEquals( loadSchema.getField(2).uid, tupleSchema.getField(2).uid );
uids.add(Long.valueOf( schema.getField(0).uid ) );
assertEquals( false, uids.contains( schema.getField(1).uid ) );
@@ -481,17 +482,18 @@ public class TestLogicalPlanMigrationVis
assertEquals( DataType.INTEGER, schema.getField(0).schema.getField(1).type );
assertEquals( DataType.BAG, schema.getField(1).type );
+ LogicalSchema bagSchema = schema.getField(1).schema;
+ LogicalSchema tupleSchema = bagSchema.getField(0).schema;
- assertEquals( DataType.CHARARRAY, schema.getField(1).schema.getField(0).type );
- assertEquals( 0, schema.getField(1).schema.getField(0).alias.compareTo("name") );
- assertEquals( loadSchema.getField(0).uid, schema.getField(1).schema.getField(0).uid );
- assertEquals( DataType.INTEGER, schema.getField(1).schema.getField(1).type );
- assertEquals( 0, schema.getField(1).schema.getField(1).alias.compareTo("age") );
- assertEquals( loadSchema.getField(1).uid, schema.getField(1).schema.getField(1).uid );
- assertEquals( DataType.FLOAT, schema.getField(1).schema.getField(2).type );
- assertEquals( 0, schema.getField(1).schema.getField(2).alias.compareTo("gpa") );
- assertEquals( loadSchema.getField(2).uid, schema.getField(1).schema.getField(2).uid );
-
+ assertEquals( DataType.CHARARRAY, tupleSchema.getField(0).type );
+ assertEquals( 0, tupleSchema.getField(0).alias.compareTo("name") );
+ assertEquals( loadSchema.getField(0).uid, tupleSchema.getField(0).uid );
+ assertEquals( DataType.INTEGER, tupleSchema.getField(1).type );
+ assertEquals( 0, tupleSchema.getField(1).alias.compareTo("age") );
+ assertEquals( loadSchema.getField(1).uid, tupleSchema.getField(1).uid );
+ assertEquals( DataType.FLOAT, tupleSchema.getField(2).type );
+ assertEquals( 0, tupleSchema.getField(2).alias.compareTo("gpa") );
+ assertEquals( loadSchema.getField(2).uid, tupleSchema.getField(2).uid );
// We are doing Uid tests at the end as the uids should not repeat
uids.add(Long.valueOf( schema.getField(0).uid ) );
@@ -560,25 +562,29 @@ public class TestLogicalPlanMigrationVis
assertEquals( 0, schema.getField(0).alias.compareTo("group") );
assertEquals( DataType.BAG, schema.getField(1).type );
+ LogicalSchema bagSchema = schema.getField(1).schema;
+ LogicalSchema tupleSchema = bagSchema.getField(0).schema;
- assertEquals( DataType.CHARARRAY, schema.getField(1).schema.getField(0).type );
- assertEquals( 0, schema.getField(1).schema.getField(0).alias.compareTo("name") );
- assertEquals( loadSchema.getField(0).uid, schema.getField(1).schema.getField(0).uid );
- assertEquals( DataType.INTEGER, schema.getField(1).schema.getField(1).type );
- assertEquals( 0, schema.getField(1).schema.getField(1).alias.compareTo("age") );
- assertEquals( loadSchema.getField(1).uid, schema.getField(1).schema.getField(1).uid );
- assertEquals( DataType.FLOAT, schema.getField(1).schema.getField(2).type );
- assertEquals( 0, schema.getField(1).schema.getField(2).alias.compareTo("gpa") );
- assertEquals( loadSchema.getField(2).uid, schema.getField(1).schema.getField(2).uid );
+ assertEquals( DataType.CHARARRAY, tupleSchema.getField(0).type );
+ assertEquals( 0, tupleSchema.getField(0).alias.compareTo("name") );
+ assertEquals( loadSchema.getField(0).uid, tupleSchema.getField(0).uid );
+ assertEquals( DataType.INTEGER, tupleSchema.getField(1).type );
+ assertEquals( 0, tupleSchema.getField(1).alias.compareTo("age") );
+ assertEquals( loadSchema.getField(1).uid, tupleSchema.getField(1).uid );
+ assertEquals( DataType.FLOAT, tupleSchema.getField(2).type );
+ assertEquals( 0, tupleSchema.getField(2).alias.compareTo("gpa") );
+ assertEquals( loadSchema.getField(2).uid, tupleSchema.getField(2).uid );
assertEquals( DataType.BAG, schema.getField(2).type );
+ bagSchema = schema.getField(2).schema;
+ tupleSchema = bagSchema.getField(0).schema;
- assertEquals( DataType.CHARARRAY, schema.getField(2).schema.getField(0).type );
- assertEquals( 0, schema.getField(2).schema.getField(0).alias.compareTo("name") );
- assertEquals( load2Schema.getField(0).uid, schema.getField(2).schema.getField(0).uid );
- assertEquals( DataType.CHARARRAY, schema.getField(2).schema.getField(1).type );
- assertEquals( 0, schema.getField(2).schema.getField(1).alias.compareTo("blah") );
- assertEquals( load2Schema.getField(1).uid, schema.getField(2).schema.getField(1).uid );
+ assertEquals( DataType.CHARARRAY, tupleSchema.getField(0).type );
+ assertEquals( 0, tupleSchema.getField(0).alias.compareTo("name") );
+ assertEquals( load2Schema.getField(0).uid, tupleSchema.getField(0).uid );
+ assertEquals( DataType.CHARARRAY, tupleSchema.getField(1).type );
+ assertEquals( 0, tupleSchema.getField(1).alias.compareTo("blah") );
+ assertEquals( load2Schema.getField(1).uid, tupleSchema.getField(1).uid );
// We are doing Uid tests at the end as the uids should not repeat
@@ -650,28 +656,32 @@ public class TestLogicalPlanMigrationVis
assertEquals( DataType.BAG, schema.getField(1).type );
+ LogicalSchema bagSchema = schema.getField(1).schema;
+ LogicalSchema tupleSchema = bagSchema.getField(0).schema;
- assertEquals( DataType.CHARARRAY, schema.getField(1).schema.getField(0).type );
- assertEquals( 0, schema.getField(1).schema.getField(0).alias.compareTo("name") );
- assertEquals( loadSchema.getField(0).uid, schema.getField(1).schema.getField(0).uid );
- assertEquals( DataType.INTEGER, schema.getField(1).schema.getField(1).type );
- assertEquals( 0, schema.getField(1).schema.getField(1).alias.compareTo("age") );
- assertEquals( loadSchema.getField(1).uid, schema.getField(1).schema.getField(1).uid );
- assertEquals( DataType.FLOAT, schema.getField(1).schema.getField(2).type );
- assertEquals( 0, schema.getField(1).schema.getField(2).alias.compareTo("gpa") );
- assertEquals( loadSchema.getField(2).uid, schema.getField(1).schema.getField(2).uid );
+ assertEquals( DataType.CHARARRAY, tupleSchema.getField(0).type );
+ assertEquals( 0, tupleSchema.getField(0).alias.compareTo("name") );
+ assertEquals( loadSchema.getField(0).uid, tupleSchema.getField(0).uid );
+ assertEquals( DataType.INTEGER, tupleSchema.getField(1).type );
+ assertEquals( 0, tupleSchema.getField(1).alias.compareTo("age") );
+ assertEquals( loadSchema.getField(1).uid, tupleSchema.getField(1).uid );
+ assertEquals( DataType.FLOAT, tupleSchema.getField(2).type );
+ assertEquals( 0, tupleSchema.getField(2).alias.compareTo("gpa") );
+ assertEquals( loadSchema.getField(2).uid, tupleSchema.getField(2).uid );
assertEquals( DataType.BAG, schema.getField(2).type );
+ bagSchema = schema.getField(2).schema;
+ tupleSchema = bagSchema.getField(0).schema;
- assertEquals( DataType.CHARARRAY, schema.getField(2).schema.getField(0).type );
- assertEquals( 0, schema.getField(2).schema.getField(0).alias.compareTo("name") );
- assertEquals( load2Schema.getField(0).uid, schema.getField(2).schema.getField(0).uid );
- assertEquals( DataType.INTEGER, schema.getField(2).schema.getField(1).type );
- assertEquals( 0, schema.getField(2).schema.getField(1).alias.compareTo("age") );
- assertEquals( load2Schema.getField(1).uid, schema.getField(2).schema.getField(1).uid );
- assertEquals( DataType.CHARARRAY, schema.getField(2).schema.getField(2).type );
- assertEquals( 0, schema.getField(2).schema.getField(2).alias.compareTo("blah") );
- assertEquals( load2Schema.getField(2).uid, schema.getField(2).schema.getField(2).uid );
+ assertEquals( DataType.CHARARRAY, tupleSchema.getField(0).type );
+ assertEquals( 0, tupleSchema.getField(0).alias.compareTo("name") );
+ assertEquals( load2Schema.getField(0).uid, tupleSchema.getField(0).uid );
+ assertEquals( DataType.INTEGER, tupleSchema.getField(1).type );
+ assertEquals( 0, tupleSchema.getField(1).alias.compareTo("age") );
+ assertEquals( load2Schema.getField(1).uid, tupleSchema.getField(1).uid );
+ assertEquals( DataType.CHARARRAY, tupleSchema.getField(2).type );
+ assertEquals( 0, tupleSchema.getField(2).alias.compareTo("blah") );
+ assertEquals( load2Schema.getField(2).uid, tupleSchema.getField(2).uid );
// We are doing Uid tests at the end as the uids should not repeat
Modified: pig/trunk/test/org/apache/pig/test/TestNewPlanLogToPhyTranslationVisitor.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestNewPlanLogToPhyTranslationVisitor.java?rev=1062911&r1=1062910&r2=1062911&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestNewPlanLogToPhyTranslationVisitor.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestNewPlanLogToPhyTranslationVisitor.java Mon Jan 24 18:26:43 2011
@@ -69,6 +69,7 @@ import org.apache.pig.newplan.logical.ex
import org.apache.pig.newplan.logical.expression.ProjectExpression;
import org.apache.pig.newplan.logical.expression.SubtractExpression;
import org.apache.pig.newplan.logical.expression.UserFuncExpression;
+import org.apache.pig.newplan.logical.relational.LOCogroup;
import org.apache.pig.newplan.logical.relational.LOFilter;
import org.apache.pig.newplan.logical.relational.LOForEach;
import org.apache.pig.newplan.logical.relational.LOGenerate;
@@ -1371,4 +1372,47 @@ public class TestNewPlanLogToPhyTranslat
assertTrue(foreach.getSchema().getField(0).alias.equals("a0"));
assertTrue(foreach.getSchema().getField(1).alias.equals("a1"));
}
+
+ // See PIG-767
+ public void testCogroupSchema1() throws Exception {
+ LogicalPlanTester lpt = new LogicalPlanTester(pc);
+ lpt.buildPlan("a = load '1.txt' as (a0, a1);");
+ lpt.buildPlan("b = group a by a0;");
+ LogicalPlan plan = lpt.buildPlan("store b into 'empty';");
+
+ org.apache.pig.newplan.logical.relational.LogicalPlan newLogicalPlan = migratePlan(plan);
+ Operator store = newLogicalPlan.getSinks().get(0);
+ LOCogroup cogroup = (LOCogroup)newLogicalPlan.getPredecessors(store).get(0);
+
+ LogicalSchema cogroupSchema = cogroup.getSchema();
+ assertEquals(cogroupSchema.getField(1).type, DataType.BAG);
+ assertTrue(cogroupSchema.getField(1).alias.equals("a"));
+ LogicalSchema bagSchema = cogroupSchema.getField(1).schema;
+ assertEquals(bagSchema.getField(0).type, DataType.TUPLE);
+ assertEquals(bagSchema.getField(0).alias, null);
+ LogicalSchema tupleSchema = bagSchema.getField(0).schema;
+ assertEquals(tupleSchema.size(), 2);
+ }
+
+ // See PIG-767
+ public void testCogroupSchema2() throws Exception {
+ LogicalPlanTester lpt = new LogicalPlanTester(pc);
+ lpt.buildPlan("a = load '1.txt' as (a0, a1);");
+ lpt.buildPlan("b = group a by a0;");
+ lpt.buildPlan("c = foreach b generate a.a1;");
+ LogicalPlan plan = lpt.buildPlan("store c into 'empty';");
+
+ org.apache.pig.newplan.logical.relational.LogicalPlan newLogicalPlan = migratePlan(plan);
+ Operator store = newLogicalPlan.getSinks().get(0);
+ LOForEach foreach = (LOForEach)newLogicalPlan.getPredecessors(store).get(0);
+
+ LogicalSchema foreachSchema = foreach.getSchema();
+ assertEquals(foreachSchema.getField(0).type, DataType.BAG);
+ LogicalSchema bagSchema = foreachSchema.getField(0).schema;
+ assertEquals(bagSchema.getField(0).type, DataType.TUPLE);
+ assertEquals(bagSchema.getField(0).alias, null);
+ LogicalSchema tupleSchema = bagSchema.getField(0).schema;
+ assertEquals(tupleSchema.size(), 1);
+ assertTrue(tupleSchema.getField(0).alias.equals("a1"));
+ }
}
Modified: pig/trunk/test/org/apache/pig/test/TestPigServer.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestPigServer.java?rev=1062911&r1=1062910&r2=1062911&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestPigServer.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestPigServer.java Mon Jan 24 18:26:43 2011
@@ -481,7 +481,7 @@ public class TestPigServer extends TestC
InputStream fileWithStdOutContents = new DataInputStream( new BufferedInputStream( new FileInputStream(stdOutRedirectedFile)));
BufferedReader reader = new BufferedReader(new InputStreamReader(fileWithStdOutContents));
while ((s = reader.readLine()) != null) {
- assertTrue(s.equals("c: {group: int,a: {field1: int,field2: float,field3: chararray},b: {field4: bytearray,field5: double,field6: chararray}}") == true);
+ assertTrue(s.equals("c: {group: int,a: {(field1: int,field2: float,field3: chararray)},b: {(field4: bytearray,field5: double,field6: chararray)}}") == true);
}
fileWithStdOutContents.close();
}
Modified: pig/trunk/test/org/apache/pig/test/TestSchema.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestSchema.java?rev=1062911&r1=1062910&r2=1062911&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestSchema.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestSchema.java Mon Jan 24 18:26:43 2011
@@ -653,7 +653,7 @@ public class TestSchema extends TestCase
Iterator<Tuple> it = pigServer.openIterator("c");
while(it.hasNext()) {
Tuple t = it.next();
- assertEquals("{a: {f1: chararray,f2: int}}", t.get(0));
+ assertEquals("{a: {(f1: chararray,f2: int)}}", t.get(0));
}
cluster.shutDown();
}