private boolean compileOperator(OperatorKey logicalKey,
Map<OperatorKey, LogicalOperator> logicalOpTable,
Properties properties,
OperatorKey physicalKey)
throws ExecException {
ExecPhysicalOperator pp;
LogicalOperator lo = logicalOpTable.get(logicalKey);
String scope = lo.getScope();
boolean compileInputs = true;
if (lo instanceof LOEval) {
pp = new POEval(scope,
nodeIdGenerator.getNextNodeId(scope),
physicalOpTable,
((LOEval) lo).getSpec(),
lo.getOutputType());
}
else if (lo instanceof LOCogroup) {
pp = new POCogroup(scope,
nodeIdGenerator.getNextNodeId(scope),
physicalOpTable,
((LOCogroup) lo).getSpecs(),
lo.getOutputType());
}
else if (lo instanceof LOLoad) {
pp = new POLoad(scope,
nodeIdGenerator.getNextNodeId(scope),
physicalOpTable,
pigContext,
((LOLoad)lo).getInputFileSpec(),
lo.getOutputType());
}
else if (lo instanceof LOSplitOutput) {
LOSplitOutput loso = (LOSplitOutput)lo;
LOSplit los = ((LOSplit)(logicalOpTable.get(loso.getInputs().get(0))));
pp = new POSplit(scope,
nodeIdGenerator.getNextNodeId(scope),
physicalOpTable,
doCompile(los.getInputs().get(0),
logicalOpTable,
properties),
los.getConditions(),
loso.getReadFrom(),
lo.getOutputType());
compileInputs = false;
}
else if (lo instanceof LOStore) {
pp = new POStore(scope,
nodeIdGenerator.getNextNodeId(scope),
physicalOpTable,
lo.getInputs().get(0),
materializedResults,
((LOStore)lo).getOutputFileSpec(),
((LOStore)lo).isAppend(),
pigContext);
}
else if (lo instanceof LOUnion) {
pp = new POUnion(scope,
nodeIdGenerator.getNextNodeId(scope),
physicalOpTable,
((LOUnion)lo).getInputs().size(),
lo.getOutputType());
}
else if (lo instanceof LOSort) {
pp = new POSort(scope,
nodeIdGenerator.getNextNodeId(scope),
physicalOpTable,
((LOSort)lo).getSortSpec(),
lo.getOutputType());
}
else {
throw new ExecException("Internal error: Unknown logical operator.");
}
physicalKey.scope = pp.getScope();
physicalKey.id = pp.getId();
logicalToPhysicalKeys.put(logicalKey, physicalKey);
return compileInputs;
}