class QueryIterator extends QueryOptions implements YieldingKeyValueIterator<Key,Value>, JexlContextCreator.JexlContextValueComparator,
                SourceFactory<Key,Value> {

    public static boolean isDocumentSpecificRange(Range r) {
        Preconditions.checkNotNull(r);
        
        // Also @see datawave.query.index.lookup.TupleToRange
        // We have already made the assertion that the client is sending us
        // an inclusive start key due to the inability to ascertain the
        // difference between and event-specific range and a continueMultiScan.
        //
        // As such, it is acceptable for us to make the same assertion on the
        // inclusivity of the start key.
        
        // Cannot have a null start or end key
        if (r.isInfiniteStartKey() || r.isInfiniteStopKey()) {
            return false;
        }
        
        // Cannot span multiple rows.
        Key startKey = r.getStartKey();
        Key endKey = r.getEndKey();
        if (!startKey.getRowData().equals(endKey.getRowData())) {
            return false;
        }
        
        // Column Family must contain a null byte separator.
        Text startCF = startKey.getColumnFamily();
        Text endCF = endKey.getColumnFamily();
        if (startCF.find(Constants.NULL) == -1 || endCF.find(Constants.NULL) == -1) {
            return false;
        }
        return true;
    }

    public  QueryIterator();
    public  QueryIterator(QueryIterator other, IteratorEnvironment env);

}