public static ExprNodeDesc conjunction(List<ExprNodeDesc> inputExpr) throws UDFArgumentException {
    List<ExprNodeDesc> operands=new ArrayList<ExprNodeDesc>();
    for (ExprNodeDesc e : inputExpr) {
      conjunctiveDecomposition(e, operands);
    }
    for (int i = 0; i < operands.size(); i++) {
      ExprNodeDesc curr = operands.get(i);
      if (isOr(curr)) {
        if (deterministicIntersection(curr.getChildren(), operands)) {
          operands.remove(i);
          i--;
        }
      }
    }

    if (operands.isEmpty()) {
      return null;
    }
    if (operands.size() > 1) {
      return ExprNodeGenericFuncDesc.newInstance(new GenericUDFOPAnd(), operands);
    } else {
      return operands.get(0);
    }
  }
Checks whether the keys of a child operator are a prefix of the keys of a
parent operator.
@param childKeys keys of the child operator
@param parentKeys keys of the parent operator
@param childOp child operator
@param parentOp parent operator
@return true if the keys are a prefix, false otherwise
@throws SemanticException
ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDescUtils.java