@Override
  public void generateCanonicalizedExpression(StringBuilder clauseBuffer,
      ExecutionContext context) {
    // prepend the internal iterator variable name for this RunTimeIterator
    int currScopeID = context.currentScope().getScopeID();
    if (currScopeID == scopeID) {
      // should have been set at this point
      clauseBuffer.insert(0, index_internal_id == null ? internalId : index_internal_id);
    } else {
      clauseBuffer.insert(0, internalId).insert(0, '_').insert(0, scopeID).insert(0, "scope");
    }
  }
(Re)evaluate in the context of the current iterations through the cross-product. If this
iterator is not dependent on the current iteration, then just return the previously evaluated
collection. Otherwise, re-evaluate. Returns null if the collection itself is null or UNDEFINED
geode-core/src/main/java/org/apache/geode/cache/query/internal/RuntimeIterator.java