@Override
  public int getSizeEstimate(ExecutionContext context) throws FunctionDomainException,
      TypeMismatchException, NameResolutionException, QueryInvocationTargetException {
    IndexInfo[] idxInfo = getIndexInfo(context);
    assert idxInfo.length == 1;

    if (context instanceof QueryExecutionContext) {
      QueryExecutionContext qcontext = (QueryExecutionContext) context;
      if (qcontext.isHinted(idxInfo[0]._index.getName())) {
        return qcontext.getHintSize(idxInfo[0]._index.getName());
      }
    }

    int op = _is_defined ? TOK_NE : TOK_EQ;
    return idxInfo[0]._index.getSizeEstimate(QueryService.UNDEFINED, op, idxInfo[0]._matchLevel);
  }
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/CompiledUndefined.java