Skip to content

Commit 029a48c

Browse files
committed
fix
1 parent bef489c commit 029a48c

13 files changed

+398
-290
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/id/impl/EmulatedSequenceReactiveIdentifierGenerator.java

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
*/
66
package org.hibernate.reactive.id.impl;
77

8+
import org.hibernate.dialect.CockroachDialect;
9+
import org.hibernate.dialect.Dialect;
10+
import org.hibernate.dialect.OracleDialect;
11+
import org.hibernate.dialect.PostgreSQLDialect;
12+
import org.hibernate.dialect.SQLServerDialect;
813
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
914
import org.hibernate.id.enhanced.SequenceStyleGenerator;
1015
import org.hibernate.id.enhanced.TableStructure;
@@ -91,21 +96,45 @@ protected Object[] selectParameters() {
9196
return new Object[] {};
9297
}
9398

94-
@Override
95-
protected String buildSelectQuery() {
99+
@Override
100+
protected String buildSelectQuery(Dialect dialect) {
96101
return "select tbl." + valueColumnName + " from " + renderedTableName + " tbl";
97102
}
98103

99104
@Override
100-
protected String buildUpdateQuery() {
105+
protected String buildUpdateQuery(Dialect dialect) {
106+
if ( dialect instanceof PostgreSQLDialect || dialect instanceof CockroachDialect ) {
107+
return "update " + renderedTableName + " set " + valueColumnName + "=$1"
108+
+ " where " + valueColumnName + "=$2";
109+
110+
}
111+
if ( dialect instanceof SQLServerDialect ) {
112+
return "update " + renderedTableName + " set " + valueColumnName + "=@P1"
113+
+ " where " + valueColumnName + "=@P2";
114+
115+
}
116+
if ( dialect instanceof OracleDialect ) {
117+
return "update " + renderedTableName + " set " + valueColumnName + "=:1"
118+
+ " where " + valueColumnName + "=:2";
119+
120+
}
101121
return "update " + renderedTableName + " set " + valueColumnName + "=?"
102122
+ " where " + valueColumnName + "=?";
103123
}
104124

105125
@Override
106-
protected String buildInsertQuery() {
107-
return "insert into " + renderedTableName + " (" + valueColumnName + ") "
108-
+ " values (?)";
126+
protected String buildInsertQuery(Dialect dialect) {
127+
final String sql = "insert into " + renderedTableName + " (" + valueColumnName + ") values ";
128+
if ( dialect instanceof PostgreSQLDialect || dialect instanceof CockroachDialect ) {
129+
return sql + "($1)";
130+
}
131+
if ( dialect instanceof SQLServerDialect ) {
132+
return sql + "(@P1)";
133+
}
134+
if ( dialect instanceof OracleDialect ) {
135+
return sql + "(:1)";
136+
}
137+
return sql + "(?)";
109138
}
110139

111140
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/id/impl/TableReactiveIdentifierGenerator.java

Lines changed: 50 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@
1414
import org.hibernate.LockOptions;
1515
import org.hibernate.boot.model.relational.Database;
1616
import org.hibernate.boot.model.relational.SqlStringGenerationContext;
17+
import org.hibernate.dialect.CockroachDialect;
1718
import org.hibernate.dialect.Dialect;
19+
import org.hibernate.dialect.OracleDialect;
20+
import org.hibernate.dialect.PostgreSQLDialect;
21+
import org.hibernate.dialect.SQLServerDialect;
1822
import org.hibernate.engine.config.spi.ConfigurationService;
1923
import org.hibernate.engine.config.spi.StandardConverters;
2024
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
@@ -26,7 +30,6 @@
2630
import org.hibernate.jdbc.TooManyRowsAffectedException;
2731
import org.hibernate.metamodel.spi.RuntimeModelCreationContext;
2832
import org.hibernate.reactive.pool.ReactiveConnection;
29-
import org.hibernate.reactive.pool.impl.Parameters;
3033
import org.hibernate.reactive.provider.Settings;
3134
import org.hibernate.reactive.session.ReactiveConnectionSupplier;
3235
import org.hibernate.service.ServiceRegistry;
@@ -79,10 +82,9 @@ public TableReactiveIdentifierGenerator(TableGenerator generator, RuntimeModelCr
7982

8083
JdbcEnvironment jdbcEnvironment = serviceRegistry.getService( JdbcEnvironment.class );
8184
Dialect dialect = jdbcEnvironment.getDialect();
82-
Parameters parameters = Parameters.instance( dialect );
83-
selectQuery = parameters.process( applyLocksToSelect( dialect, "tbl", buildSelectQuery() ) );
84-
updateQuery = parameters.process( buildUpdateQuery() );
85-
insertQuery = parameters.process( buildInsertQuery() );
85+
selectQuery = applyLocksToSelect( dialect, "tbl", buildSelectQuery( dialect ) );
86+
updateQuery = buildUpdateQuery( dialect );
87+
insertQuery = buildInsertQuery( dialect );
8688
}
8789

8890
public TableReactiveIdentifierGenerator(
@@ -100,10 +102,9 @@ public TableReactiveIdentifierGenerator(
100102
segmentColumnName = null;
101103
segmentValue = null;
102104

103-
Parameters parameters = Parameters.instance( dialect );
104-
selectQuery = parameters.process( applyLocksToSelect( dialect, "tbl", buildSelectQuery() ) );
105-
updateQuery = parameters.process( buildUpdateQuery() );
106-
insertQuery = parameters.process( buildInsertQuery() );
105+
selectQuery = applyLocksToSelect( dialect, "tbl", buildSelectQuery( dialect ) );
106+
updateQuery = buildUpdateQuery( dialect );
107+
insertQuery = buildInsertQuery( dialect );
107108
}
108109

109110
@Override
@@ -118,10 +119,9 @@ public void configure(Type type, Properties params, ServiceRegistry serviceRegis
118119
renderedTableName = determineTableName( type, params, serviceRegistry );
119120

120121
Dialect dialect = jdbcEnvironment.getDialect();
121-
Parameters parameters = Parameters.instance( dialect );
122-
selectQuery = parameters.process( applyLocksToSelect( dialect, "tbl", buildSelectQuery() ) );
123-
updateQuery = parameters.process( buildUpdateQuery() );
124-
insertQuery = parameters.process( buildInsertQuery() );
122+
selectQuery = applyLocksToSelect( dialect, "tbl", buildSelectQuery( dialect ) );
123+
updateQuery = buildUpdateQuery( dialect );
124+
insertQuery = buildInsertQuery( dialect );
125125
}
126126

127127
@Override
@@ -265,19 +265,48 @@ protected Object[] selectParameters() {
265265
return new Object[]{ segmentValue };
266266
}
267267

268-
protected String buildSelectQuery() {
269-
return "select tbl." + valueColumnName + " from " + renderedTableName + " tbl"
270-
+ " where tbl." + segmentColumnName + "=?";
268+
protected String buildSelectQuery(Dialect dialect) {
269+
final String sql = "select tbl." + valueColumnName + " from " + renderedTableName + " tbl where tbl." + segmentColumnName;
270+
if ( dialect instanceof PostgreSQLDialect || dialect instanceof CockroachDialect ) {
271+
return sql + "=$1";
272+
}
273+
if ( dialect instanceof SQLServerDialect ) {
274+
return sql + "=@P1";
275+
}
276+
if ( dialect instanceof OracleDialect ) {
277+
return sql + "=:1";
278+
}
279+
return sql + "=?";
271280
}
272281

273-
protected String buildUpdateQuery() {
282+
protected String buildUpdateQuery(Dialect dialect) {
283+
if ( dialect instanceof PostgreSQLDialect || dialect instanceof CockroachDialect ) {
284+
return "update " + renderedTableName + " set " + valueColumnName + "=$1"
285+
+ " where " + valueColumnName + "=$2 and " + segmentColumnName + "=$3";
286+
}
287+
if ( dialect instanceof SQLServerDialect ) {
288+
return "update " + renderedTableName + " set " + valueColumnName + "=@P1"
289+
+ " where " + valueColumnName + "=@P2 and " + segmentColumnName + "=@P3";
290+
}
291+
if ( dialect instanceof OracleDialect ) {
292+
return "update " + renderedTableName + " set " + valueColumnName + "=:1"
293+
+ " where " + valueColumnName + "=:2 and " + segmentColumnName + "=:3";
294+
}
274295
return "update " + renderedTableName + " set " + valueColumnName + "=?"
275296
+ " where " + valueColumnName + "=? and " + segmentColumnName + "=?";
276297
}
277298

278-
protected String buildInsertQuery() {
279-
return "insert into " + renderedTableName + " (" + segmentColumnName + ", " + valueColumnName + ") "
280-
+ " values (?, ?)";
299+
protected String buildInsertQuery(Dialect dialect) {
300+
final String sql = "insert into " + renderedTableName + " (" + segmentColumnName + ", " + valueColumnName + ") ";
301+
if ( dialect instanceof PostgreSQLDialect || dialect instanceof CockroachDialect ) {
302+
return sql + " values ($1, $2)";
303+
}
304+
if ( dialect instanceof SQLServerDialect ) {
305+
return sql + " values (@P1, @P2)";
306+
}
307+
if ( dialect instanceof OracleDialect ) {
308+
return sql + " values (:1, :2)";
309+
}
310+
return sql + " values (?, ?)";
281311
}
282-
283312
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveAbstractEntityPersister.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
import org.hibernate.reactive.metamodel.mapping.internal.ReactiveCompoundNaturalIdMapping;
6464
import org.hibernate.reactive.metamodel.mapping.internal.ReactiveSimpleNaturalIdMapping;
6565
import org.hibernate.reactive.pool.ReactiveConnection;
66-
import org.hibernate.reactive.pool.impl.Parameters;
6766
import org.hibernate.reactive.session.ReactiveSession;
6867
import org.hibernate.reactive.session.impl.ReactiveQueryExecutorLookup;
6968
import org.hibernate.sql.SimpleSelect;
@@ -108,10 +107,6 @@
108107
*/
109108
public interface ReactiveAbstractEntityPersister extends ReactiveEntityPersister {
110109

111-
default Parameters parameters() {
112-
return Parameters.instance( getFactory().getJdbcServices().getDialect() );
113-
}
114-
115110
/**
116111
* A self-reference of type {@code AbstractEntityPersister}.
117112
*
@@ -150,7 +145,7 @@ default String generateSelectLockString(LockOptions lockOptions) {
150145
if ( factory.getSessionFactoryOptions().isCommentsEnabled() ) {
151146
select.setComment( lockOptions.getLockMode() + " lock " + getEntityName() );
152147
}
153-
return parameters().process( select.toStatementString() );
148+
return select.toStatementString();
154149
}
155150

156151
default String generateUpdateLockString(LockOptions lockOptions) {
@@ -163,7 +158,7 @@ default String generateUpdateLockString(LockOptions lockOptions) {
163158
if ( factory.getSessionFactoryOptions().isCommentsEnabled() ) {
164159
update.setComment( lockOptions.getLockMode() + " lock " + getEntityName() );
165160
}
166-
return parameters().process( update.toStatementString() );
161+
return update.toStatementString();
167162
}
168163

169164
@Override

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveJoinedSubclassEntityPersister.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,6 @@ protected AttributeMapping buildPluralAttributeMapping(
139139
);
140140
}
141141

142-
@Override
143-
public String generateSelectVersionString() {
144-
String sql = super.generateSelectVersionString();
145-
return parameters().process( sql );
146-
}
147-
148142
@Override
149143
protected InsertCoordinator buildInsertCoordinator() {
150144
return ReactiveCoordinatorFactory.buildInsertCoordinator( this, getFactory() );

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveSingleTableEntityPersister.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,6 @@ protected MultiIdEntityLoader<Object> buildMultiIdLoader() {
101101
return reactiveDelegate.buildMultiIdEntityLoader();
102102
}
103103

104-
@Override
105-
public String generateSelectVersionString() {
106-
String sql = super.generateSelectVersionString();
107-
return parameters().process( sql );
108-
}
109-
110104
@Override
111105
protected UpdateCoordinator buildUpdateCoordinator() {
112106
return ReactiveCoordinatorFactory.buildUpdateCoordinator( this, getFactory() );

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveUnionSubclassEntityPersister.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,6 @@ public NaturalIdMapping generateNaturalIdMapping(MappingModelCreationProcess cre
144144
return ReactiveAbstractEntityPersister.super.generateNaturalIdMapping(creationProcess, bootEntityDescriptor);
145145
}
146146

147-
@Override
148-
public String generateSelectVersionString() {
149-
String sql = super.generateSelectVersionString();
150-
return parameters().process( sql );
151-
}
152147

153148
@Override
154149
protected void validateGenerator() {

hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/ReactiveImprovedExtractionContextImpl.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import org.hibernate.boot.model.relational.SqlStringGenerationContext;
4040
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
4141
import org.hibernate.reactive.pool.ReactiveConnectionPool;
42-
import org.hibernate.reactive.pool.impl.Parameters;
4342
import org.hibernate.resource.transaction.spi.DdlTransactionIsolator;
4443
import org.hibernate.service.ServiceRegistry;
4544
import org.hibernate.tool.schema.internal.exec.ImprovedExtractionContextImpl;
@@ -79,8 +78,7 @@ private ResultSet getQueryResultSet(
7978
String queryString,
8079
Object[] positionalParameters) {
8180
final Object[] parametersToUse = positionalParameters != null ? positionalParameters : new Object[0];
82-
final Parameters parametersDialectSpecific = Parameters.instance( getJdbcEnvironment().getDialect() );
83-
final String queryToUse = parametersDialectSpecific.process( queryString, parametersToUse.length );
81+
final String queryToUse = queryString;
8482
return connectionPool
8583
// DDL needs to run outside the current transaction. For example:
8684
// - increment on a table-based id generator should happen outside the current tx.

hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/temptable/ReactiveTemporaryTableHelper.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.hibernate.reactive.logging.impl.Log;
2121
import org.hibernate.reactive.logging.impl.LoggerFactory;
2222
import org.hibernate.reactive.pool.ReactiveConnection;
23-
import org.hibernate.reactive.pool.impl.Parameters;
2423
import org.hibernate.reactive.session.ReactiveConnectionSupplier;
2524
import org.hibernate.reactive.util.impl.CompletionStages;
2625

@@ -144,10 +143,7 @@ public static CompletionStage<Void> cleanTemporaryTableRows(
144143
TemporaryTableExporter exporter,
145144
Function<SharedSessionContractImplementor, String> sessionUidAccess,
146145
SharedSessionContractImplementor session) {
147-
// Workaround for https://hibernate.atlassian.net/browse/HHH-16486
148-
final String sql = Parameters.instance( temporaryTable.getDialect() )
149-
.process( exporter.getSqlTruncateCommand( temporaryTable, sessionUidAccess, session ) );
150-
146+
final String sql = exporter.getSqlTruncateCommand( temporaryTable, sessionUidAccess, session );
151147
Object[] params = PreparedStatementAdaptor.bind( ps -> {
152148
if ( temporaryTable.getSessionUidColumn() != null ) {
153149
final String sessionUid = sessionUidAccess.apply( session );

hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/exec/internal/StandardReactiveJdbcMutationExecutor.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import java.util.function.BiConsumer;
1313
import java.util.function.Function;
1414

15-
import org.hibernate.dialect.Dialect;
1615
import org.hibernate.engine.jdbc.spi.JdbcServices;
1716
import org.hibernate.engine.spi.SharedSessionContractImplementor;
1817
import org.hibernate.query.spi.QueryOptions;
@@ -21,7 +20,6 @@
2120
import org.hibernate.reactive.logging.impl.Log;
2221
import org.hibernate.reactive.logging.impl.LoggerFactory;
2322
import org.hibernate.reactive.pool.ReactiveConnection;
24-
import org.hibernate.reactive.pool.impl.Parameters;
2523
import org.hibernate.reactive.session.ReactiveConnectionSupplier;
2624
import org.hibernate.reactive.sql.exec.spi.ReactiveJdbcMutationExecutor;
2725
import org.hibernate.resource.jdbc.spi.LogicalConnectionImplementor;
@@ -116,7 +114,7 @@ private static String finalSql(
116114
ExecutionContext executionContext,
117115
JdbcServices jdbcServices,
118116
QueryOptions queryOptions) {
119-
String sql = queryOptions == null
117+
return queryOptions == null
120118
? jdbcMutation.getSqlString()
121119
: jdbcServices.getDialect()
122120
.addSqlHintOrComment(
@@ -127,7 +125,5 @@ private static String finalSql(
127125
.getSessionFactoryOptions()
128126
.isCommentsEnabled()
129127
);
130-
final Dialect dialect = executionContext.getSession().getJdbcServices().getDialect();
131-
return Parameters.instance( dialect ).process( sql );
132128
}
133129
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.hibernate.reactive.logging.impl.Log;
2222
import org.hibernate.reactive.logging.impl.LoggerFactory;
2323
import org.hibernate.reactive.pool.ReactiveConnection;
24-
import org.hibernate.reactive.pool.impl.Parameters;
2524
import org.hibernate.reactive.session.ReactiveConnectionSupplier;
2625
import org.hibernate.reactive.util.impl.CompletionStages;
2726
import org.hibernate.resource.jdbc.spi.JdbcSessionContext;
@@ -158,7 +157,7 @@ private CompletionStage<ResultSet> executeQuery() {
158157

159158
Dialect dialect = executionContext.getSession().getJdbcServices().getDialect();
160159
// I'm not sure calling Parameters here is necessary, the query should already have the right parameters
161-
final String sql = Parameters.instance( dialect ).process( getFinalSql() );
160+
final String sql = getFinalSql();
162161
Object[] parameters = PreparedStatementAdaptor.bind( super::bindParameters );
163162

164163
final SessionEventListenerManager eventListenerManager = executionContext

0 commit comments

Comments
 (0)