public Object process(Node nd, Stack<Node> stack, NodeProcessorCtx opProcCtx,
Object... nodeOutputs) throws SemanticException {
UnionOperator union = (UnionOperator) nd;
GenMRProcContext ctx = (GenMRProcContext) opProcCtx;
ParseContext parseCtx = ctx.getParseCtx();
UnionProcContext uCtx = parseCtx.getUCtx();
// Map-only subqueries can be optimized in future to not write to a file in
// future
Map<Operator<? extends Serializable>, GenMapRedCtx> mapCurrCtx = ctx
.getMapCurrCtx();
// The plan needs to be broken only if one of the sub-queries involve a
// map-reduce job
if (uCtx.isMapOnlySubq()) {
// merge currTask from multiple topOps
HashMap<Operator<? extends Serializable>, Task<? extends Serializable>> opTaskMap = ctx
.getOpTaskMap();
if (opTaskMap != null && opTaskMap.size() > 0) {
Task<? extends Serializable> tsk = opTaskMap.get(null);
if (tsk != null) {
ctx.setCurrTask(tsk);
}
}
UnionParseContext uPrsCtx = uCtx.getUnionParseContext(union);
if ((uPrsCtx != null) && (uPrsCtx.getMapJoinQuery())) {
GenMapRedUtils.mergeMapJoinUnion(union, ctx, UnionProcFactory
.getPositionParent(union, stack));
} else {
mapCurrCtx.put((Operator<? extends Serializable>) nd, new GenMapRedCtx(
ctx.getCurrTask(), ctx.getCurrTopOp(), ctx.getCurrAliasId()));
}
return null;
}
ctx.setCurrUnionOp(union);
UnionParseContext uPrsCtx = uCtx.getUnionParseContext(union);
assert uPrsCtx != null;
Task<? extends Serializable> currTask = ctx.getCurrTask();
int pos = UnionProcFactory.getPositionParent(union, stack);