boolean hasDeletions = executor.hasDeletions(query); Iterator<R> newElements = executor.getNew(query); if (query.isSorted()) { for (int i = query.numSubQueries() - 1; i >= 0; i--) { BackendQueryHolder<B> subq = query.getSubQuery(i); Iterator<R> subqiter = getFilterIterator((subq.isSorted()) ? new LimitAdjustingIterator(subq) : new ResultMergeSortIterator<R>(subqiter, iter, query.getSortOrder(), query.hasDuplicateResults()); Collections.sort(allNew, query.getSortOrder()); iter = new ResultMergeSortIterator<R>(allNew.iterator(), iter, query.getSortOrder(), query.hasDuplicateResults()); List<Iterator<R>> iters = new ArrayList<Iterator<R>>(query.numSubQueries()); for (int i = 0; i < query.numSubQueries(); i++) { BackendQueryHolder<B> subq = query.getSubQuery(i); Iterator<R> subiter = new LimitAdjustingIterator(subq); subiter = getFilterIterator(subiter, hasDeletions, !subq.isFitted()); if (query.hasDuplicateResults()) { //Cache results and filter out duplicates final Set<R> seenResults = new HashSet<R>(); iter = Iterators.filter(iter, new Predicate<R>() {
@Override public boolean apply(@Nullable R r) { return (!filterDeletions || !executor.isDeleted(query, r)) && (!filterMatches || query.matches(r)); } });
boolean hasDeletions = executor.hasDeletions(query); Iterator<R> newElements = executor.getNew(query); if (query.isSorted()) { for (int i = query.numSubQueries() - 1; i >= 0; i--) { BackendQueryHolder<B> subq = query.getSubQuery(i); Iterator<R> subqiter = getFilterIterator((subq.isSorted()) ? new LimitAdjustingIterator(subq) : new ResultMergeSortIterator<R>(subqiter, iter, query.getSortOrder(), query.hasDuplicateResults()); Collections.sort(allNew, query.getSortOrder()); iter = new ResultMergeSortIterator<R>(allNew.iterator(), iter, query.getSortOrder(), query.hasDuplicateResults()); List<Iterator<R>> iters = new ArrayList<Iterator<R>>(query.numSubQueries()); for (int i = 0; i < query.numSubQueries(); i++) { BackendQueryHolder<B> subq = query.getSubQuery(i); Iterator<R> subiter = new LimitAdjustingIterator(subq); subiter = getFilterIterator(subiter, hasDeletions, !subq.isFitted()); if (query.hasDuplicateResults()) { //Cache results and filter out duplicates final Set<R> seenResults = new HashSet<R>(); iter = Iterators.filter(iter, new Predicate<R>() {
@Override public boolean apply(@Nullable R r) { return (!filterDeletions || !executor.isDeleted(query, r)) && (!filterMatches || query.matches(r)); } });
boolean hasDeletions = executor.hasDeletions(query); Iterator<R> newElements = executor.getNew(query); if (query.isSorted()) { for (int i = query.numSubQueries() - 1; i >= 0; i--) { BackendQueryHolder<B> subq = query.getSubQuery(i); Iterator<R> subqiter = getFilterIterator((subq.isSorted()) ? new LimitAdjustingIterator(subq) : new ResultMergeSortIterator<R>(subqiter, iter, query.getSortOrder(), query.hasDuplicateResults()); Collections.sort(allNew, query.getSortOrder()); iter = new ResultMergeSortIterator<R>(allNew.iterator(), iter, query.getSortOrder(), query.hasDuplicateResults()); List<Iterator<R>> iters = new ArrayList<Iterator<R>>(query.numSubQueries()); for (int i = 0; i < query.numSubQueries(); i++) { BackendQueryHolder<B> subq = query.getSubQuery(i); Iterator<R> subiter = new LimitAdjustingIterator(subq); subiter = getFilterIterator(subiter, hasDeletions, !subq.isFitted()); if (query.hasDuplicateResults()) { //Cache results and filter out duplicates final Set<R> seenResults = new HashSet<R>(); iter = Iterators.filter(iter, new Predicate<R>() {
@Override public boolean apply(@Nullable R r) { return (!filterDeletions || !executor.isDeleted(query, r)) && (!filterMatches || query.matches(r)); } });