Class SQLServer2005LimitHandler
java.lang.Object
org.hibernate.dialect.pagination.AbstractLimitHandler
org.hibernate.community.dialect.pagination.SQLServer2005LimitHandler
- All Implemented Interfaces:
org.hibernate.dialect.pagination.LimitHandler
public class SQLServer2005LimitHandler
extends org.hibernate.dialect.pagination.AbstractLimitHandler
A
LimitHandler compatible with SQL Server 2005 and later
that uses top() and rownumber().-
Field Summary
Fields inherited from class org.hibernate.dialect.pagination.AbstractLimitHandler
NO_LIMIT -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionintbindLimitParametersAtEndOfQuery(org.hibernate.query.spi.Limit limit, PreparedStatement statement, int index) intbindLimitParametersAtStartOfQuery(org.hibernate.query.spi.Limit limit, PreparedStatement statement, int index) intconvertToFirstRowValue(int zeroBasedFirstResult) processSql(String sql, int jdbcParameterCount, @Nullable org.hibernate.sql.ast.spi.ParameterMarkerStrategy parameterMarkerStrategy, org.hibernate.query.spi.QueryOptions queryOptions) processSql(String sql, org.hibernate.query.spi.Limit limit) When the offset of the current row is 0, add atop(?)clause to the given SQL query.final booleanfinal booleanfinal booleanMethods inherited from class org.hibernate.dialect.pagination.AbstractLimitHandler
bindLimitParameters, bindLimitParametersFirst, bindLimitParametersInReverseOrder, forceLimitUsage, getFirstRow, getForUpdatePattern, getMaxOrLimit, hasFirstRow, hasMaxRows, insertAfterDistinct, insertAfterSelect, insertAtEnd, insertBeforeForUpdate, setMaxRows, supportsLimitOffset, supportsOffsetMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.hibernate.dialect.pagination.LimitHandler
getParameterPositionStart, processSql, processSqlMutatesState
-
Constructor Details
-
SQLServer2005LimitHandler
public SQLServer2005LimitHandler()
-
-
Method Details
-
supportsLimit
public final boolean supportsLimit()- Specified by:
supportsLimitin interfaceorg.hibernate.dialect.pagination.LimitHandler- Overrides:
supportsLimitin classorg.hibernate.dialect.pagination.AbstractLimitHandler
-
useMaxForLimit
public final boolean useMaxForLimit()- Overrides:
useMaxForLimitin classorg.hibernate.dialect.pagination.AbstractLimitHandler
-
supportsVariableLimit
public final boolean supportsVariableLimit()- Overrides:
supportsVariableLimitin classorg.hibernate.dialect.pagination.AbstractLimitHandler
-
convertToFirstRowValue
public int convertToFirstRowValue(int zeroBasedFirstResult) - Overrides:
convertToFirstRowValuein classorg.hibernate.dialect.pagination.AbstractLimitHandler
-
processSql
When the offset of the current row is 0, add atop(?)clause to the given SQL query. When the offset is non-zero, wrap the given query in an outer query that limits the results using therow_number()window function.with query_ as ( select row_.*, row_number() over (order by current_timestamp) AS rownumber_ from ( [original-query] ) row_ ) select [alias-list] from query_ where rownumber_ >= ? and rownumber_ < ?Where
[original-query]is the original SQL query, with atop()clause added iff the query has anorder byclause, and with generated aliases added to any elements of the projection list that don't already have aliases, and[alias-list]is a list of aliases in the projection list.- Specified by:
processSqlin interfaceorg.hibernate.dialect.pagination.LimitHandler- Overrides:
processSqlin classorg.hibernate.dialect.pagination.AbstractLimitHandler- Returns:
- A new SQL statement
-
processSql
-
bindLimitParametersAtStartOfQuery
public int bindLimitParametersAtStartOfQuery(org.hibernate.query.spi.Limit limit, PreparedStatement statement, int index) throws SQLException - Specified by:
bindLimitParametersAtStartOfQueryin interfaceorg.hibernate.dialect.pagination.LimitHandler- Overrides:
bindLimitParametersAtStartOfQueryin classorg.hibernate.dialect.pagination.AbstractLimitHandler- Throws:
SQLException
-
bindLimitParametersAtEndOfQuery
public int bindLimitParametersAtEndOfQuery(org.hibernate.query.spi.Limit limit, PreparedStatement statement, int index) throws SQLException - Specified by:
bindLimitParametersAtEndOfQueryin interfaceorg.hibernate.dialect.pagination.LimitHandler- Overrides:
bindLimitParametersAtEndOfQueryin classorg.hibernate.dialect.pagination.AbstractLimitHandler- Throws:
SQLException
-