Ejemplo n.º 1
0
 public ExprNodeGenericFuncEvaluator(ExprNodeGenericFuncDesc expr) {
   this.expr = expr;
   children = new ExprNodeEvaluator[expr.getChildExprs().size()];
   isEager = false;
   for (int i = 0; i < children.length; i++) {
     ExprNodeDesc child = expr.getChildExprs().get(i);
     ExprNodeEvaluator nodeEvaluator = ExprNodeEvaluatorFactory.get(child);
     children[i] = nodeEvaluator;
     // If we have eager evaluators anywhere below us, then we are eager too.
     if (nodeEvaluator instanceof ExprNodeGenericFuncEvaluator) {
       if (((ExprNodeGenericFuncEvaluator) nodeEvaluator).isEager) {
         isEager = true;
       }
       // Base case:  we are eager if a child is stateful
       GenericUDF childUDF = ((ExprNodeGenericFuncDesc) child).getGenericUDF();
       if (FunctionRegistry.isStateful(childUDF)) {
         isEager = true;
       }
     }
   }
   deferredChildren = new GenericUDF.DeferredObject[expr.getChildExprs().size()];
   for (int i = 0; i < deferredChildren.length; i++) {
     if (isEager) {
       deferredChildren[i] = new EagerExprObject(children[i]);
     } else {
       deferredChildren[i] = new DeferredExprObject(children[i]);
     }
   }
 }