private static Boolean recursiveExpr(final ExprNodeDesc node, final List<String> skewedCols,
      final List<String> cell, final List<List<String>> uniqSkewedValues)
      throws SemanticException {
    if (isUnknownState(node)) {
      return null;
    }

    if (node instanceof ExprNodeGenericFuncDesc) {
      if (((ExprNodeGenericFuncDesc) node).getGenericUDF() instanceof GenericUDFOPEqual) {
        return evaluateEqualNd(node, skewedCols, cell, uniqSkewedValues);
      } else if (FunctionRegistry.isOpAnd(node)) {
        return evaluateAndNode(node, skewedCols, cell, uniqSkewedValues);
      } else if (FunctionRegistry.isOpOr(node)) {
        return evaluateOrNode(node, skewedCols, cell, uniqSkewedValues);
      } else if (FunctionRegistry.isOpNot(node)) {
        return evaluateNotNode(node, skewedCols, cell, uniqSkewedValues);
      } else {
        return null;
      }
    } else {
      return null;
    }
  }
Walk through expression tree recursively to evaluate.


@param node
@param skewedCols
@param cell
@return
@throws SemanticException
ql/src/java/org/apache/hadoop/hive/ql/optimizer/listbucketingpruner/ListBucketingPrunerUtils.java