Skip to content

Commit e4d3431

Browse files
author
nathan.xu
committed
HHH-16283 - improve in minor ways
1 parent b6575f4 commit e4d3431

File tree

4 files changed

+13
-13
lines changed

4 files changed

+13
-13
lines changed

hibernate-core/src/main/java/org/hibernate/dialect/pagination/LimitHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import java.sql.PreparedStatement;
1010
import java.sql.SQLException;
11+
import java.util.function.Supplier;
1112

1213
import org.hibernate.query.spi.Limit;
1314
import org.hibernate.query.spi.QueryOptions;
@@ -48,7 +49,7 @@ default String processSql(String sql, Limit limit, QueryOptions queryOptions) {
4849
return processSql( sql, limit );
4950
}
5051

51-
default String processSql(String sql, Limit limit, QueryOptions queryOptions, ParameterMarkerStrategy parameterMarkerStrategy, int limitParameterStartPosition) {
52+
default String processSql(String sql, Limit limit, QueryOptions queryOptions, Supplier<String> parameterMarkerSupplier) {
5253
return processSql( sql, limit, queryOptions );
5354
}
5455

hibernate-core/src/main/java/org/hibernate/dialect/pagination/OffsetFetchLimitHandler.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@
66
*/
77
package org.hibernate.dialect.pagination;
88

9+
import java.util.function.Supplier;
10+
911
import org.hibernate.query.spi.Limit;
1012
import org.hibernate.query.spi.QueryOptions;
11-
import org.hibernate.sql.ast.internal.ParameterMarkerStrategyStandard;
12-
import org.hibernate.sql.ast.spi.ParameterMarkerStrategy;
13-
import org.hibernate.type.descriptor.jdbc.IntegerJdbcType;
1413

1514
/**
1615
* A {@link LimitHandler} for databases which support the
@@ -31,11 +30,11 @@ public OffsetFetchLimitHandler(boolean variableLimit) {
3130

3231
@Override
3332
public String processSql(String sql, Limit limit) {
34-
return processSql( sql, limit, null, ParameterMarkerStrategyStandard.INSTANCE, 1 );
33+
return processSql( sql, limit, null, () -> "?" );
3534
}
3635

3736
@Override
38-
public String processSql(String sql, Limit limit, QueryOptions queryOptions, ParameterMarkerStrategy parameterMarkerStrategy, int limitParameterStartPosition) {
37+
public String processSql(String sql, Limit limit, QueryOptions queryOptions, Supplier<String> parameterMarkerSupplier) {
3938

4039
boolean hasFirstRow = hasFirstRow(limit);
4140
boolean hasMaxRows = hasMaxRows(limit);
@@ -51,7 +50,7 @@ public String processSql(String sql, Limit limit, QueryOptions queryOptions, Par
5150
if ( hasFirstRow ) {
5251
offsetFetch.append( " offset " );
5352
if ( supportsVariableLimit() ) {
54-
offsetFetch.append( parameterMarkerStrategy.createMarker( limitParameterStartPosition++, IntegerJdbcType.INSTANCE ) );
53+
offsetFetch.append( parameterMarkerSupplier.get() );
5554
}
5655
else {
5756
offsetFetch.append( limit.getFirstRow() );
@@ -69,7 +68,7 @@ public String processSql(String sql, Limit limit, QueryOptions queryOptions, Par
6968
offsetFetch.append( " fetch first " );
7069
}
7170
if ( supportsVariableLimit() ) {
72-
offsetFetch.append( parameterMarkerStrategy.createMarker( limitParameterStartPosition++, IntegerJdbcType.INSTANCE ) );
71+
offsetFetch.append( parameterMarkerSupplier.get() );
7372
}
7473
else {
7574
offsetFetch.append( getMaxOrLimit( limit ) );

hibernate-core/src/main/java/org/hibernate/sql/results/jdbc/internal/DeferredResultSetAccess.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import java.sql.ResultSet;
1111
import java.sql.SQLException;
1212
import java.util.Collections;
13-
import java.util.function.Function;
1413

1514
import org.hibernate.LockMode;
1615
import org.hibernate.LockOptions;
@@ -25,6 +24,7 @@
2524
import org.hibernate.event.spi.HibernateMonitoringEvent;
2625
import org.hibernate.internal.CoreLogging;
2726
import org.hibernate.internal.CoreMessageLogger;
27+
import org.hibernate.internal.util.MutableInteger;
2828
import org.hibernate.query.spi.Limit;
2929
import org.hibernate.query.spi.QueryOptions;
3030
import org.hibernate.resource.jdbc.spi.JdbcSessionContext;
@@ -55,6 +55,7 @@ public class DeferredResultSetAccess extends AbstractResultSetAccess {
5555
private final LimitHandler limitHandler;
5656
private final boolean usesFollowOnLocking;
5757
private final int resultCountEstimate;
58+
private final ParameterMarkerStrategy parameterMarkerStrategy;
5859

5960
private PreparedStatement preparedStatement;
6061
private ResultSet resultSet;
@@ -72,6 +73,7 @@ public DeferredResultSetAccess(
7273
this.statementCreator = statementCreator;
7374
this.sqlStatementLogger = executionContext.getSession().getJdbcServices().getSqlStatementLogger();
7475
this.resultCountEstimate = resultCountEstimate;
76+
this.parameterMarkerStrategy = executionContext.getSession().getSessionFactory().getServiceRegistry().requireService( ParameterMarkerStrategy.class );
7577

7678
final QueryOptions queryOptions = executionContext.getQueryOptions();
7779
if ( queryOptions == null ) {
@@ -92,13 +94,12 @@ public DeferredResultSetAccess(
9294
}
9395
else {
9496
limitHandler = dialect.getLimitHandler();
97+
final MutableInteger parameterMarkerPosition = new MutableInteger( jdbcParameterBindings.getBindings().size() );
9598
sql = limitHandler.processSql(
9699
jdbcSelect.getSqlString(),
97100
limit,
98101
queryOptions,
99-
executionContext.getSession().getFactory().getServiceRegistry().getService(
100-
ParameterMarkerStrategy.class ),
101-
jdbcParameterBindings.getBindings().size() + 1
102+
() -> parameterMarkerStrategy.createMarker( parameterMarkerPosition.incrementAndGet(), null )
102103
);
103104
}
104105

hibernate-core/src/test/java/org/hibernate/orm/test/sql/ast/ParameterMarkerStrategyTests.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.hibernate.testing.jdbc.SQLStatementInspector;
2020
import org.hibernate.testing.orm.domain.gambit.EntityOfBasics;
2121
import org.hibernate.testing.orm.junit.DomainModel;
22-
import org.hibernate.testing.orm.junit.FailureExpected;
2322
import org.hibernate.testing.orm.junit.Jira;
2423
import org.hibernate.testing.orm.junit.RequiresDialect;
2524
import org.hibernate.testing.orm.junit.ServiceRegistry;

0 commit comments

Comments
 (0)