Collection<E> filteredCollection, int initialSize, boolean needToFilterByInMemoryReadConstraints) { int requestedFirst = context.getQuery().getFirstResult(); int requestedMax = context.getQuery().getMaxResults();
@SuppressWarnings("unchecked") protected <E extends Entity> List<E> getResultList(LoadContext<E> context, Query query, boolean ensureDistinct) { List<E> list = executeQuery(query, false); int initialSize = list.size(); if (initialSize == 0) { return list; } boolean needToFilterByInMemoryReadConstraints = needToFilterByInMemoryReadConstraints(context); boolean filteredByConstraints = false; if (needToFilterByInMemoryReadConstraints) { filteredByConstraints = security.filterByConstraints((Collection<Entity>) list); } if (!ensureDistinct) { return filteredByConstraints ? getResultListIteratively(context, query, list, initialSize, true) : list; } int requestedFirst = context.getQuery().getFirstResult(); LinkedHashSet<E> set = new LinkedHashSet<>(list); if (set.size() == list.size() && requestedFirst == 0 && !filteredByConstraints) { // If this is the first chunk and it has no duplicates and security constraints are not applied, just return it return list; } // In case of not first chunk, even if there where no duplicates, start filling the set from zero // to ensure correct paging return getResultListIteratively(context, query, set, initialSize, needToFilterByInMemoryReadConstraints); }
+ (context.getPrevQueries().isEmpty() ? "" : ", from selected") + ", query=" + (context.getQuery() == null ? null : RdbmsQueryBuilder.printQuery(context.getQuery().getQueryString())) + (context.getQuery() == null || context.getQuery().getFirstResult() == 0 ? "" : ", first=" + context.getQuery().getFirstResult()) + (context.getQuery() == null || context.getQuery().getMaxResults() == 0 ? "" : ", max=" + context.getQuery().getMaxResults()));
protected Query createQuery(EntityManager em, LoadContext context, boolean singleResult) { LoadContext.Query contextQuery = context.getQuery(); RdbmsQueryBuilder queryBuilder = AppBeans.get(RdbmsQueryBuilder.NAME); queryBuilder.init( contextQuery == null ? null : contextQuery.getQueryString(), contextQuery == null ? null : contextQuery.getCondition(), contextQuery == null ? null : contextQuery.getSort(), contextQuery == null ? null : contextQuery.getParameters(), contextQuery == null ? null : contextQuery.getNoConversionParams(), context.getId(), context.getMetaClass() ); queryBuilder.setSingleResult(singleResult); if (!context.getPrevQueries().isEmpty()) { log.debug("Restrict query by previous results"); queryBuilder.restrictByPreviousResults(userSessionSource.getUserSession().getId(), context.getQueryKey()); } Query query = queryBuilder.getQuery(em); if (contextQuery != null) { if (contextQuery.getFirstResult() != 0) query.setFirstResult(contextQuery.getFirstResult()); if (contextQuery.getMaxResults() != 0) query.setMaxResults(contextQuery.getMaxResults()); if (contextQuery.isCacheable()) { query.setCacheable(contextQuery.isCacheable()); } } return query; }