}
else {
// TODO: Don't recompute schema here
//Schema groupBySchema = schema.getField(0).schema ;
Schema groupBySchema = cg.getTupleGroupBySchema() ;
// go through all inputs again to add cast if necessary
for(int i=0;i < inputs.size(); i++) {
LogicalOperator input = inputs.get(i) ;
List<LogicalPlan> innerPlans
= new ArrayList<LogicalPlan>(groupByPlans.get(input)) ;
for(int j=0;j < innerPlans.size(); j++) {
LogicalPlan innerPlan = innerPlans.get(j) ;
byte innerType = innerPlan.getSingleLeafPlanOutputType() ;
byte expectedType = DataType.BYTEARRAY ;
if (!DataType.isAtomic(innerType) && (DataType.TUPLE != innerType)) {
int errCode = 1061;
String msg = "Sorry, group by complex types"
+ " will be supported soon" ;
msgCollector.collect(msg, MessageType.Error) ;
throw new TypeCheckerException(msg, errCode, PigException.INPUT) ;
}
try {
expectedType = groupBySchema.getField(j).type ;
}
catch(FrontendException fee) {
int errCode = 1060;
String msg = "Cannot resolve COGroup output schema" ;
msgCollector.collect(msg, MessageType.Error) ;
throw new TypeCheckerException(msg, errCode, PigException.INPUT, fee) ;
}
if (innerType != expectedType) {
insertAtomicCastForCOGroupInnerPlan(innerPlan,
cg,
expectedType) ;
}
}
}
}
}
catch (FrontendException fe) {
int errCode = 1060;
String msg = "Cannot resolve COGroup output schema" ;
msgCollector.collect(msg, MessageType.Error) ;
throw new TypeCheckerException(msg, errCode, PigException.INPUT, fe) ;
}
// TODO: Don't recompute schema here. Remove all from here!
// Generate output schema based on the schema generated from
// COGroup itself
try {
Schema outputSchema = cg.regenerateSchema() ;
}
catch (FrontendException fe) {
int errCode = 1060;
String msg = "Cannot resolve COGroup output schema" ;
msgCollector.collect(msg, MessageType.Error) ;