@Override public int getFetchOffset() { return mdDelegate.getFetchOffset(); }
@Override protected void appendLimitAndOffsetClauses(StringBuilder buffer) { // limit results int offset = queryMetadata.getFetchOffset(); int limit = queryMetadata.getFetchLimit(); if (offset > 0) { buffer.append(" OFFSET ").append(offset); } if (limit > 0) { buffer.append(" FETCH NEXT ").append(limit).append(" ROWS ONLY "); } } }
@Override protected void appendLimitAndOffsetClauses(StringBuilder buffer) { int offset = queryMetadata.getFetchOffset(); int limit = queryMetadata.getFetchLimit(); if (limit > 0 || offset > 0) { int max = (limit <= 0) ? Integer.MAX_VALUE : limit + offset; buffer.insert(0, "select * from ( select tid.*, ROWNUM rnum from ("); buffer.append(") tid where ROWNUM <=").append(max).append(") where rnum > ").append(offset); } }
@Override protected void appendLimitAndOffsetClauses(StringBuilder buffer) { int limit = queryMetadata.getFetchLimit(); int offset = queryMetadata.getFetchOffset(); if (limit > 0) { String sql = buffer.toString(); // If contains distinct insert top limit after if (sql.startsWith("SELECT DISTINCT ")) { buffer.replace(0, 15, "SELECT DISTINCT TOP " + (offset + limit)); } else { buffer.replace(0, 6, "SELECT TOP " + (offset + limit)); } } }
@Override protected void appendLimitAndOffsetClauses(StringBuilder buffer) { // limit results int offset = queryMetadata.getFetchOffset(); int limit = queryMetadata.getFetchLimit(); if (limit > 0) { buffer.append(" LIMIT ").append(limit); } if (offset > 0) { buffer.append(" OFFSET ").append(offset); } } }
@Override protected void appendLimitAndOffsetClauses(StringBuilder buffer) { int limit = queryMetadata.getFetchLimit(); int offset = queryMetadata.getFetchOffset(); if (limit > 0) { String sql = buffer.toString(); // If contains distinct insert top limit after if (sql.startsWith("SELECT DISTINCT ")) { buffer.replace(0, 15, "SELECT DISTINCT TOP " + (offset + limit)); } else { buffer.replace(0, 6, "SELECT TOP " + (offset + limit)); } } } }
@Override protected void appendLimitAndOffsetClauses(StringBuilder buffer) { int offset = queryMetadata.getFetchOffset(); int limit = queryMetadata.getFetchLimit(); if (offset > 0 || limit > 0) { buffer.append(" LIMIT "); // both OFFSET and LIMIT must be present, so come up with defaults // if one of // them is not set by the user if (limit == 0) { limit = Integer.MAX_VALUE; } buffer.append(limit).append(" OFFSET ").append(offset); } } }
@Override protected void appendLimitAndOffsetClauses(StringBuilder buffer) { int offset = queryMetadata.getFetchOffset(); int limit = queryMetadata.getFetchLimit(); if (offset > 0 || limit > 0) { buffer.append(" LIMIT "); // both OFFSET and LIMIT must be present, so come up with defaults // if one of // them is not set by the user if (limit == 0) { limit = Integer.MAX_VALUE; } buffer.append(limit).append(" OFFSET ").append(offset); } } }
/** * Warn user in case query uses both limit and joint prefetch, as we don't support this combination. */ private void checkLimitAndJointPrefetch() { if(queryMetadata.getFetchLimit() == 0 && queryMetadata.getFetchOffset() == 0) { return; } if(!jointPrefetchChecker.haveJointNode(queryMetadata.getPrefetchTree())) { return; } logger.warn("Query uses both limit and joint prefetch, this most probably will lead to incorrect result. " + "Either use disjointById prefetch or get full result set."); }
private boolean interceptSinglePageQuery() { if (serverMetadata.getFetchOffset() >= 0 && serverMetadata.getFetchLimit() > 0 && serverMetadata.getCacheKey() != null) { int startIndex = serverMetadata.getFetchOffset(); int endIndex = startIndex + serverMetadata.getFetchLimit();
/** * Helper method to process a ResultSet. */ @SuppressWarnings({ "rawtypes", "unchecked" }) protected void readResultSet(ResultSet resultSet, RowDescriptor descriptor, Query query, OperationObserver delegate) throws SQLException, Exception { long t1 = System.currentTimeMillis(); QueryMetadata metadata = query.getMetaData(dataNode.getEntityResolver()); RowReader<?> rowReader = dataNode.rowReader(descriptor, metadata); JDBCResultIterator resultReader = new JDBCResultIterator(null, resultSet, rowReader); LimitResultIterator it = new LimitResultIterator(resultReader, getInMemoryOffset(metadata.getFetchOffset()), metadata.getFetchLimit()); if (!delegate.isIteratedResult()) { List resultRows = it.allRows(); dataNode.getJdbcEventLogger().logSelectCount(resultRows.size(), System.currentTimeMillis() - t1); delegate.nextRows(query, resultRows); } else { try { delegate.nextRows(query, it); } catch (Exception ex) { it.close(); throw ex; } } }
sqlQuery.setFetchOffset(md.getFetchOffset()); sqlQuery.setResult(compiledExpression.getResult()); sqlQuery.setPageSize(md.getPageSize());