@Override
      public Object process(Node nd, Stack<Node> stack,
                            NodeProcessorCtx procCtx, Object... nodeOutputs)
        throws SemanticException {

        // We can only push down stuff which appears as part of
        // a pure conjunction:  reject OR, CASE, etc.
        for (Node ancestor : stack) {
          if (nd == ancestor) {
            break;
          }
          if (!FunctionRegistry.isOpAnd((ExprNodeDesc) ancestor)) {
            return nd;
          }
        }

        if (nd instanceof ExprNodeGenericFuncDesc) {
          return analyzeExpr((ExprNodeGenericFuncDesc) nd, searchConditions, nodeOutputs);
        } else {
          return nd;
        }
      }
Analyzes a predicate.

@param predicate predicate to be analyzed

@param searchConditions receives conditions produced by analysis

@return residual predicate which could not be translated to
searchConditions
ql/src/java/org/apache/hadoop/hive/ql/index/IndexPredicateAnalyzer.java