Skip to content

Commit 12694e9

Browse files
committed
[#2314] Fix '?' parameters in limit/offset not being replaced with native equivalent when using PostgreSQL/MSSQL
Reverts changes introduced in e257189, probably assuming this was more efficient and didn't break anything (understandably, considering tests did pass).
1 parent e640d47 commit 12694e9

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sql/internal/ReactiveNativeNonSelectQueryPlan.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.hibernate.query.sql.spi.ParameterOccurrence;
2121
import org.hibernate.query.sqm.internal.SqmJdbcExecutionContextAdapter;
2222
import org.hibernate.reactive.engine.spi.ReactiveSharedSessionContractImplementor;
23-
import org.hibernate.reactive.pool.impl.Parameters;
2423
import org.hibernate.reactive.query.sql.spi.ReactiveNonSelectQueryPlan;
2524
import org.hibernate.reactive.sql.exec.internal.StandardReactiveJdbcMutationExecutor;
2625
import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl;
@@ -72,9 +71,8 @@ public CompletionStage<Integer> executeReactiveUpdate(DomainQueryExecutionContex
7271

7372
final SQLQueryParser parser = new SQLQueryParser( sql, null, session.getFactory() );
7473

75-
Parameters parameters = Parameters.instance( session.getDialect() );
7674
final JdbcOperationQueryMutation jdbcMutation = new JdbcOperationQueryMutationNative(
77-
parameters.process( parser.process() ),
75+
parser.process(),
7876
jdbcParameterBinders,
7977
affectedTableNames
8078
);

hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sql/internal/ReactiveNativeSelectQueryPlanImpl.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import java.util.Set;
1212
import java.util.concurrent.CompletionStage;
1313

14-
import org.hibernate.dialect.Dialect;
1514
import org.hibernate.engine.spi.SessionFactoryImplementor;
1615
import org.hibernate.query.results.ResultSetMapping;
1716
import org.hibernate.query.spi.DomainQueryExecutionContext;
@@ -23,7 +22,6 @@
2322
import org.hibernate.query.sql.spi.ParameterOccurrence;
2423
import org.hibernate.query.sqm.internal.SqmJdbcExecutionContextAdapter;
2524
import org.hibernate.reactive.engine.spi.ReactiveSharedSessionContractImplementor;
26-
import org.hibernate.reactive.pool.impl.Parameters;
2725
import org.hibernate.reactive.query.internal.ReactiveResultSetMappingProcessor;
2826
import org.hibernate.reactive.query.spi.ReactiveNativeSelectQueryPlan;
2927
import org.hibernate.reactive.sql.exec.internal.StandardReactiveSelectExecutor;
@@ -61,8 +59,7 @@ public ReactiveNativeSelectQueryPlanImpl(
6159
resultSetMapping.addAffectedTableNames( affectedTableNames, sessionFactory );
6260
}
6361
this.affectedTableNames = affectedTableNames;
64-
Dialect dialect = sessionFactory.getJdbcServices().getDialect();
65-
this.sql = Parameters.instance( dialect ).process( parser.process() );
62+
this.sql = parser.process();
6663
this.parameterList = parameterList;
6764

6865
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/internal/ReactiveDeferredResultSetAccess.java

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

1515
import org.hibernate.HibernateException;
1616
import org.hibernate.LockOptions;
17+
import org.hibernate.dialect.Dialect;
1718
import org.hibernate.engine.jdbc.spi.SqlStatementLogger;
1819
import org.hibernate.engine.spi.SessionEventListenerManager;
1920
import org.hibernate.engine.spi.SessionFactoryImplementor;
@@ -22,6 +23,7 @@
2223
import org.hibernate.reactive.logging.impl.Log;
2324
import org.hibernate.reactive.logging.impl.LoggerFactory;
2425
import org.hibernate.reactive.pool.ReactiveConnection;
26+
import org.hibernate.reactive.pool.impl.Parameters;
2527
import org.hibernate.reactive.session.ReactiveConnectionSupplier;
2628
import org.hibernate.reactive.session.ReactiveSession;
2729
import org.hibernate.reactive.util.impl.CompletionStages;
@@ -172,6 +174,11 @@ private CompletionStage<ResultSet> executeQuery() {
172174
return completedFuture( logicalConnection )
173175
.thenCompose( lg -> {
174176
LOG.tracef( "Executing query to retrieve ResultSet : %s", getFinalSql() );
177+
178+
Dialect dialect = executionContext.getSession().getJdbcServices().getDialect();
179+
// This must happen at the very last minute in order to process parameters
180+
// added in org.hibernate.dialect.pagination.OffsetFetchLimitHandler.processSql
181+
final String sql = Parameters.instance( dialect ).process( getFinalSql() );
175182
Object[] parameters = PreparedStatementAdaptor.bind( super::bindParameters );
176183

177184
final SessionEventListenerManager eventListenerManager = executionContext
@@ -181,7 +188,7 @@ private CompletionStage<ResultSet> executeQuery() {
181188

182189
eventListenerManager.jdbcExecuteStatementStart();
183190
return connection()
184-
.selectJdbc( getFinalSql(), parameters )
191+
.selectJdbc( sql, parameters )
185192
.thenCompose( this::validateResultSet )
186193
.whenComplete( (resultSet, throwable) -> {
187194
// FIXME: I don't know if this event makes sense for Vert.x

0 commit comments

Comments
 (0)