/** * Retrieve the indicated first row for pagination * * @param selection The row selection options * * @return The first row */ public static int getFirstRow(RowSelection selection) { return ( selection == null || selection.getFirstRow() == null ) ? 0 : selection.getFirstRow(); }
@Override public int getFirstResult() { getProducer().checkOpen(); // to be JPA compliant this method returns an int - specifically the "magic number" 0 (ZERO) defined by the spec. // For access to the Integer (for checking), use #getQueryOptions#getFirstRow instead return queryOptions.getFirstRow() == null ? 0 : queryOptions.getFirstRow(); }
@Override public String processSql(String sql, RowSelection selection) { final boolean hasOffset = LimitHelper.hasFirstRow( selection ); String sqlOffset = hasOffset ? " SKIP " + selection.getFirstRow() : ""; String sqlLimit = " FIRST " + getMaxOrLimit( selection ); String sqlOffsetLimit = sqlOffset + sqlLimit; String result = new StringBuilder( sql.length() + 10 ) .append( sql ) .insert( sql.toLowerCase( Locale.ROOT ).indexOf( "select" ) + 6, sqlOffsetLimit ).toString(); return result; }
@Override public String processSql(String sql, RowSelection selection) { final String soff = " offset " + selection.getFirstRow(); final String slim = " fetch first " + getMaxOrLimit( selection ) + " rows only"; final StringBuilder sb = new StringBuilder( sql.length() + soff.length() + slim.length() ) .append( sql ); if (LimitHelper.hasFirstRow( selection )) { sb.append( soff ); } if (LimitHelper.hasMaxRows( selection )) { sb.append( slim ); } return sb.toString(); }
/** * The position of the first query result to be retrieved, previously set by * {@link #setFirstResult(int)} or {@link #setHibernateFirstResult(int)}. * <p/> * If the value was not initialized by {@link #setFirstResult(int)} or * {@link #setHibernateFirstResult(int)}, then {@code null} is returned, resulting * in pagination starting from position 0. * <p/> * If {@link #setHibernateFirstResult(int)} was called with a negative value, then 0 * is returned. * * @return the position of the first query result, or {@code null} if uninitialized. * * @see #setFirstResult(int) * @see #setHibernateFirstResult(int) * * @deprecated {@link #getFirstResult()} should be used instead. */ @Deprecated default Integer getHibernateFirstResult() { return getQueryOptions().getFirstRow(); }
/** * For Oracle, the FOR UPDATE clause cannot be applied when using ORDER BY, DISTINCT or views. * @param parameters * @return @see <a href="https://docs.oracle.com/database/121/SQLRF/statements_10002.htm#SQLRF01702">Oracle FOR UPDATE restrictions</a> */ @Override public boolean useFollowOnLocking(QueryParameters parameters) { if (parameters != null ) { String lowerCaseSQL = parameters.getFilteredSQL().toLowerCase(); return DISTINCT_KEYWORD_PATTERN.matcher( lowerCaseSQL ).find() || GROUP_BY_KEYWORD_PATTERN.matcher( lowerCaseSQL ).find() || UNION_KEYWORD_PATTERN.matcher( lowerCaseSQL ).find() || ( parameters.hasRowSelection() && ( ORDER_BY_KEYWORD_PATTERN.matcher( lowerCaseSQL ).find() || parameters.getRowSelection().getFirstRow() != null ) ); } else { return true; } }
sb.append( " offset " ).append( selection.getFirstRow() ).append( " rows fetch next " );
@Override public String processSql(String sql, RowSelection selection) { if (LimitHelper.hasFirstRow( selection )) { //nest the main query in an outer select return "select * from ( select inner2_.*, rownumber() over(order by order of inner2_) as rownumber_ from ( " + sql + " fetch first " + getMaxOrLimit( selection ) + " rows only ) as inner2_ ) as inner1_ where rownumber_ > " + selection.getFirstRow() + " order by rownumber_"; } return sql + " fetch first " + getMaxOrLimit( selection ) + " rows only"; }
@Override public String processSql(String sql, RowSelection selection) { if ( LimitHelper.hasFirstRow( selection ) ) { //nest the main query in an outer select return "select * from ( select inner2_.*, rownumber() over(order by order of inner2_) as rownumber_ from ( " + sql + " fetch first " + getMaxOrLimit( selection ) + " rows only ) as inner2_ ) as inner1_ where rownumber_ > " + selection.getFirstRow() + " order by rownumber_"; } return sql + " fetch first " + getMaxOrLimit( selection ) + " rows only"; }
final Integer maxRows; if ( selection != null ) { firstRow = selection.getFirstRow(); maxRows = selection.getMaxRows();
if ( needsLimit ) { final int first = queryParameters.getRowSelection().getFirstRow() == null ? 0 : queryParameters.getRowSelection().getFirstRow(); final int max = queryParameters.getRowSelection().getMaxRows() == null ? -1
int includedCount = -1; int first = !hasLimit || queryParameters.getRowSelection().getFirstRow() == null ? 0 : queryParameters.getRowSelection().getFirstRow(); int max = !hasLimit || queryParameters.getRowSelection().getMaxRows() == null ? -1
private void fillInNamedQueryBuilder(NamedQueryDefinitionBuilder builder, org.hibernate.query.Query query) { builder.setQuery( query.getQueryString() ) .setComment( query.getComment() ) .setCacheable( query.isCacheable() ) .setCacheRegion( query.getCacheRegion() ) .setCacheMode( query.getCacheMode() ) .setReadOnly( query.isReadOnly() ) .setFlushMode( query.getHibernateFlushMode() ); if ( query.getQueryOptions().getFirstRow() != null ) { builder.setFirstResult( query.getQueryOptions().getFirstRow() ); } if ( query.getQueryOptions().getMaxRows() != null ) { builder.setMaxResults( query.getQueryOptions().getMaxRows() ); } if ( query.getQueryOptions().getTimeout() != null ) { builder.setTimeout( query.getQueryOptions().getTimeout() ); } if ( query.getQueryOptions().getFetchSize() != null ) { builder.setFetchSize( query.getQueryOptions().getFetchSize() ); } }
/** * Retrieve the indicated first row for pagination * * @param selection The row selection options * * @return The first row */ public static int getFirstRow(RowSelection selection) { return ( selection == null || selection.getFirstRow() == null ) ? 0 : selection.getFirstRow(); }
@Override public String processSql(String sql, RowSelection selection) { final boolean hasOffset = LimitHelper.hasFirstRow( selection ); String sqlOffset = hasOffset ? " SKIP " + selection.getFirstRow() : ""; String sqlLimit = " FIRST " + getMaxOrLimit( selection ); String sqlOffsetLimit = sqlOffset + sqlLimit; String result = new StringBuilder( sql.length() + 10 ) .append( sql ) .insert( sql.toLowerCase( Locale.ROOT ).indexOf( "select" ) + 6, sqlOffsetLimit ).toString(); return result; }
@Override public String processSql(String sql, RowSelection selection) { String beginRow; String endRow; beginRow = encoder.encode(selection.getFirstRow() + ""); endRow = encoder.encode((selection.getFetchSize() + selection.getFirstRow()) + ""); return "select * from ( select *,ROW_NUMBER() over() as rnum from (" + sql + ") where rnum between " + beginRow + " and " + endRow; }
@Override public String processSql(String sql, RowSelection selection) { if ( LimitHelper.hasFirstRow( selection ) ) { //nest the main query in an outer select return "select * from ( select inner2_.*, rownumber() over(order by order of inner2_) as rownumber_ from ( " + sql + " fetch first " + getMaxOrLimit( selection ) + " rows only ) as inner2_ ) as inner1_ where rownumber_ > " + selection.getFirstRow() + " order by rownumber_"; } return sql + " fetch first " + getMaxOrLimit( selection ) + " rows only"; }
@Override public String processSql(String sql, RowSelection selection) { final boolean hasOffset = LimitHelper.hasFirstRow(selection); return sql + (hasOffset ? " limit ({?" + selection.getFetchSize() + "})" + " offset ({?" + selection.getFirstRow() + "})" : " limit ({?" + selection.getFetchSize() + "})"); }
@Override public String processSql(String sql, RowSelection selection) { if (LimitHelper.hasFirstRow( selection )) { //nest the main query in an outer select return "select * from ( select inner2_.*, rownumber() over(order by order of inner2_) as rownumber_ from ( " + sql + " fetch first " + getMaxOrLimit( selection ) + " rows only ) as inner2_ ) as inner1_ where rownumber_ > " + selection.getFirstRow() + " order by rownumber_"; } return sql + " fetch first " + getMaxOrLimit( selection ) + " rows only"; }
public JoinFetchUsage(QueryParameters queryParameters) { boolean collect = containsCollectionFetches(); boolean hasLimit = queryParameters.getRowSelection() != null && queryParameters.getRowSelection().definesLimits(); if (collect && hasLimit) { firstRow = queryParameters.getRowSelection().getFirstRow(); maxRows = queryParameters.getRowSelection().getMaxRows(); time = System.currentTimeMillis(); } }