public FindAllIterator(AbstractTopiaDao<E> dao, int batchSize, String hql, Map<String, Object> params) { if (!dao.hqlContainsOrderBy(hql)) { throw new QueryMissingOrderException(hql, params); } this.dao = dao; this.hql = hql; this.params = params; pager = dao.initPagination(hql, params, batchSize); // empty iterator (will be changed at first next call) data = Collections.emptyIterator(); firstPageLoaded = false; }
protected <O> O findFirstOrNull(String hql, Map<String, Object> hqlParameters) throws QueryMissingOrderException { if (!hqlContainsOrderBy(hql)) { throw new QueryMissingOrderException(hql, hqlParameters); } O result = findAnyOrNull(hql, hqlParameters); return result; }
protected <O> PaginationResult<O> findPage(String hql, Map<String, Object> hqlParameters, PaginationParameter page) { List<O> elements = find(hql, hqlParameters, page); String countHql = "select count(topiaId) "; if (hqlStartsWithSelect(hql)) { // must remove the from clause, otherwise some sql queries won't work. countHql += hql.substring(hql.toLowerCase().indexOf(" from ")); } else { countHql += hql; } if (hqlContainsOrderBy(countHql)) { // must remove the order by clause, otherwise some sql queries won't work. countHql = countHql.substring(0, countHql.toLowerCase().indexOf("order by")); } long count = count(countHql, hqlParameters); PaginationResult<O> result = PaginationResult.of(elements, count, page); return result; }
PaginationParameter firstPage = PaginationParameter.of(0, pageSize); if (hqlContainsOrderBy(hql)) {
protected <O> List<O> find(String hql, Map<String, Object> hqlParameters, PaginationParameter page) { Preconditions.checkNotNull(hql); Preconditions.checkNotNull(hqlParameters); Preconditions.checkNotNull(page); boolean hqlContainsOrderClause = hqlContainsOrderBy(hql); boolean pageContainsOrderClause = !page.getOrderClauses().isEmpty(); if (!hqlContainsOrderClause && !pageContainsOrderClause) { throw new QueryMissingOrderException(hql, hqlParameters, page); } // Must have one (and only one) order by clause in query Preconditions.checkArgument( hqlContainsOrderClause ^ pageContainsOrderClause, String.format( "One 'order by' clause (and only one) must be specified. [orderByInHql=%b] [orderByInPage=%b]", hqlContainsOrderClause, pageContainsOrderClause) ); if (pageContainsOrderClause) { hql += " ORDER BY "; Iterable<String> orderClauses = Iterables.transform(page.getOrderClauses(), PAGINATION_ORDER_TO_HQL); hql += Joiner.on(", ").join(orderClauses); } List<O> result = topiaJpaSupport.find( hql, page.getStartIndex(), page.getEndIndex(), hqlParameters); return result; }