@Override
  public SelectResults filterEvaluate(ExecutionContext context, SelectResults intermediateResults,
      boolean completeExpansionNeeded, @Retained CompiledValue iterOperands,
      RuntimeIterator[] indpndntItrs, boolean isIntersection, boolean conditioningNeeded,
      boolean evaluateProjection) throws FunctionDomainException, TypeMismatchException,
      NameResolutionException, QueryInvocationTargetException {
    // see if we're dependent on the current iterator
    // if not let super handle it
    // RuntimeIterator itr = context.getCurrentIterator();
    // Support.Assert(itr != null);
    if (!isDependentOnCurrentScope(context)) {
      return super.filterEvaluate(context, intermediateResults);
    }
    IndexInfo[] idxInfo = getIndexInfo(context);
    Support.Assert(idxInfo != null,
        "a comparison that is dependent, not indexed, and filter evaluated is not possible");
    if (idxInfo.length == 1) {
      return singleBaseCollectionFilterEvaluate(context, intermediateResults,
          completeExpansionNeeded, iterOperands, idxInfo[0], indpndntItrs, isIntersection,
          conditioningNeeded, evaluateProjection);
    } else {
      Support.Assert(idxInfo.length == 2,
          "A Composite CompiledComparison which is filter evaluatable needs to have two indexes");
      return doubleBaseCollectionFilterEvaluate(context, intermediateResults,
          completeExpansionNeeded, iterOperands, idxInfo, indpndntItrs);
    }
  }
Asif : Evaluates as a filter taking advantage of indexes if appropriate. This function has a
meaningful implementation only in CompiledComparison & CompiledUndefined . It is unsupported in
other classes. The additional parameters which it takes are a boolean which is used to indicate
whether the index result set needs to be expanded to the top level or not. The second is a
CompiledValue representing the operands which are only iter evaluatable. The CompiledValue
passed will be null except if a GroupJunction has only one filter evaluatable condition & rest
are iter operands. In such cases , the iter operands will be evaluated while expanding/cutting
down the index resultset
geode-core/src/main/java/org/apache/geode/cache/query/internal/CompiledComparison.java