@Override
public Object process(Node nd, Stack<Node> stack, NodeProcessorCtx procCtx,
Object... nodeOutputs) throws SemanticException {
ExprWalkerInfo ctx = (ExprWalkerInfo) procCtx;
String alias = null;
exprNodeGenericFuncDesc expr = (exprNodeGenericFuncDesc) nd;
UDFType note = expr.getGenericUDFClass().getAnnotation(UDFType.class);
if(note != null && !note.deterministic()) {
// this GenericUDF can't be pushed down
ctx.setIsCandidate(expr, false);
ctx.setDeterministic(false);
return false;
}
boolean isCandidate = true;
for (int i=0; i < nd.getChildren().size(); i++) {
exprNodeDesc ch = (exprNodeDesc) nd.getChildren().get(i);
exprNodeDesc newCh = ctx.getConvertedNode(ch);
if (newCh != null) {
expr.getChildExprs().set(i, newCh);
ch = newCh;
}
String chAlias = ctx.getAlias(ch);
isCandidate = isCandidate && ctx.isCandidate(ch);