public void setPageSize(int pageSize) { this.pageNumber = (pageSize != 0 && pageSize != SIZE_UNLIMITED) ? (getStartRow() / pageSize) : 0; this.pageSize = pageSize; }
private static String addLimitOffsetToQuery(String query, PageControl pageControl) { StringBuilder queryWithPagingSorting = new StringBuilder(query.length() + 50); queryWithPagingSorting.append(query); // for postgres, first order by queryWithPagingSorting.append(getOrderByFragment(pageControl.getOrderingFieldsAsArray())); // for postgres, then paginate queryWithPagingSorting.append(" LIMIT ").append(pageControl.getPageSize()); queryWithPagingSorting.append(" OFFSET ").append(pageControl.getStartRow()); return queryWithPagingSorting.toString(); } }
public static String addOracleNativePagingSortingToQuery(String query, PageControl pageControl) { StringBuilder queryWithPagingSorting = new StringBuilder(query.length() + 50); int minRowNum = pageControl.getStartRow() + 1; int maxRowNum = minRowNum + pageControl.getPageSize() - 1; // pagination calculations based off of double-projection of the results queryWithPagingSorting.append("SELECT outerResults.* FROM ( "); queryWithPagingSorting.append("SELECT innerResults.*, ROWNUM rnum FROM ( "); queryWithPagingSorting.append(query); // for oracle, order by occurs at the end of the original query, whether grouped or not queryWithPagingSorting.append(getOrderByFragment(pageControl.getOrderingFieldsAsArray())); queryWithPagingSorting.append(" ) innerResults "); // for oracle, paginate high off of the inner projection queryWithPagingSorting.append(" WHERE ROWNUM <= ").append(maxRowNum); // for oracle, paginate low off of the outer projection queryWithPagingSorting.append(" ) outerResults "); queryWithPagingSorting.append(" WHERE rnum >= ").append(minRowNum); return queryWithPagingSorting.toString(); }
public static String addSQLServerNativePagingSortingToQuery(String query, PageControl pageControl, boolean alternatePagingStyle) { StringBuilder queryWithPagingSorting = new StringBuilder(query.length() + 50); int minRowNum = pageControl.getStartRow() + 1; int maxRowNum = minRowNum + pageControl.getPageSize() - 1; String orderByClause = getOrderByFragment(pageControl.getOrderingFieldsAsArray()); if (alternatePagingStyle) { int index = findSelectListEndIndex(query); String selectList = query.substring(0, index); String restOfQuery = query.substring(index); queryWithPagingSorting.append("SELECT singleResults.* FROM ( "); queryWithPagingSorting.append(selectList); queryWithPagingSorting.append(", ROW_NUMBER() OVER( " + orderByClause + " ) AS rownum "); queryWithPagingSorting.append(restOfQuery); queryWithPagingSorting.append(") AS singleResults "); } else { queryWithPagingSorting.append("SELECT outerResults.* FROM ( "); queryWithPagingSorting.append(" SELECT innerResults.*, "); queryWithPagingSorting.append(" ROW_NUMBER() OVER( " + orderByClause + " ) AS rownum "); queryWithPagingSorting.append(" FROM ( " + query + " ) AS innerResults "); queryWithPagingSorting.append(" ) AS outerResults "); } queryWithPagingSorting.append("WHERE rownum <= ").append(maxRowNum); queryWithPagingSorting.append(" AND rownum >= ").append(minRowNum); return queryWithPagingSorting.toString(); }
public static void setDataPage(Query query, PageControl pageControl) { if (pageControl.getPageSize() > 0) { query.setFirstResult(pageControl.getStartRow()); query.setMaxResults(pageControl.getPageSize()); } }
private Query buildQuery(String queryString, PageControl pageControl) { boolean first = true; StringBuilder queryBuilder = new StringBuilder(queryString); for (OrderingField orderingField : pageControl.getOrderingFieldsAsArray()) { if (first) { // TODO GH: We could see if there already is an order by clause and contribute or override it queryBuilder.append(" ORDER BY "); first = false; } else { queryBuilder.append(", "); } queryBuilder.append(orderingField.getField()).append(" ").append(orderingField.getOrdering()); } Query query = entityManager.createQuery(queryBuilder.toString()); if (pageControl.getPageSize() > 0) { query.setFirstResult(pageControl.getStartRow()); query.setMaxResults(pageControl.getPageSize()); } return query; }
int minTotalSize = getStartRow(); int pageSize = isUnlimited() ? Integer.MAX_VALUE : getPageSize();
@Override public PageList<Alert> findAlertsByCriteria(Subject subject, AlertCriteria criteria) { CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria); if (!authorizationManager.isInventoryManager(subject)) { generator.setAuthorizationResourceFragment(CriteriaQueryGenerator.AuthorizationTokenType.RESOURCE, "alertDefinition.resource", subject.getId()); } Query query = generator.getQuery(entityManager); if (log.isDebugEnabled()) { QueryImpl queryImpl = (QueryImpl) query; PageControl pageControl = CriteriaQueryGenerator.getPageControl(criteria); log.debug("*Executing JPA query: " + queryImpl.getHibernateQuery().getQueryString() + ", selection=[" + pageControl.getStartRow() + ".." + (pageControl.getStartRow() + pageControl.getPageSize() - 1) + "]..."); } CriteriaQueryRunner<Alert> queryRunner = new CriteriaQueryRunner<Alert>(criteria, generator, entityManager); PageList<Alert> alerts = queryRunner.execute(); fetchCollectionFields(alerts); return alerts; } }
if ((results.getTotalSize() != 0 && results.getTotalSize() <= pageControl.getStartRow()) || (results.isEmpty() && pageControl.getPageNumber() != 0)) { if (log.isTraceEnabled()) { if (results.getTotalSize() != 0 && results.getTotalSize() <= pageControl.getStartRow()) {
if (results.getTotalSize() <= pageControl.getStartRow() || (results.isEmpty() && pageControl.getPageNumber() != 0)) { if (log.isTraceEnabled()) { if (results.getTotalSize() <= pageControl.getStartRow()) {
/** * Return the object corresponding to the current {@link #getRowIndex()}. If the PageList object currently cached * doesn't include that index then {@link #getDataPage()} is called to retrieve the appropriate page. * * @return the row data that corresponds to {@link #getRowIndex()} * * @throws IllegalArgumentException if the {@link #getRowIndex()} is outside the range of the dataset size */ @Override public Object getRowData() { getCurrentPage(); if (!isRowAvailable()) { /* * March 11, 2009 - the only currently known way this can fail is if the countQuery returned 0 but the * actual data query returned nothing; generally, this is a programming error, but it's possible that * the facelet changed (new columns shown, other columns removed) or the query itself changed (and perhaps * the sortable columns are different); in either case, let's be paranoid and try it all over again with * a default PageControl object. */ // Reset back to the default page control, which will also persist the default page control. this.pagedDataBean.resetPageControl(); getCurrentPage(); // Tell the framework to start back at the first row in the page. this.currentRowIndex = 0; } int pageIndex = this.currentRowIndex - getPageControl().getStartRow(); return this.pageList.get(pageIndex); }