Skip to content

Commit 4729899

Browse files
committed
Remove DialectDelegateWrapper
1 parent bd5fd6f commit 4729899

14 files changed

+41
-289
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/jdbc/dialect/internal/ReactiveStandardDialectResolver.java

+1-35
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,8 @@
88
import org.hibernate.dialect.CockroachDialect;
99
import org.hibernate.dialect.Database;
1010
import org.hibernate.dialect.Dialect;
11-
import org.hibernate.dialect.DialectDelegateWrapper;
1211
import org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo;
1312
import org.hibernate.engine.jdbc.dialect.spi.DialectResolver;
14-
import org.hibernate.engine.spi.SessionFactoryImplementor;
15-
import org.hibernate.persister.entity.mutation.EntityMutationTarget;
16-
import org.hibernate.reactive.dialect.ReactiveOracleSqlAstTranslator;
17-
import org.hibernate.sql.ast.SqlAstTranslator;
18-
import org.hibernate.sql.ast.SqlAstTranslatorFactory;
19-
import org.hibernate.sql.ast.spi.StandardSqlAstTranslatorFactory;
20-
import org.hibernate.sql.ast.tree.Statement;
21-
import org.hibernate.sql.exec.spi.JdbcOperation;
22-
import org.hibernate.sql.model.MutationOperation;
23-
import org.hibernate.sql.model.internal.OptionalTableUpdate;
2413

2514
import static org.hibernate.dialect.CockroachDialect.parseVersion;
2615

@@ -36,30 +25,7 @@ public Dialect resolveDialect(DialectResolutionInfo info) {
3625

3726
for ( Database database : Database.values() ) {
3827
if ( database.matchesResolutionInfo( info ) ) {
39-
Dialect dialect = database.createDialect( info );
40-
if ( info.getDatabaseName().toUpperCase().startsWith( "ORACLE" ) ) {
41-
return new DialectDelegateWrapper( dialect ) {
42-
@Override
43-
public MutationOperation createOptionalTableUpdateOperation(
44-
EntityMutationTarget mutationTarget,
45-
OptionalTableUpdate optionalTableUpdate,
46-
SessionFactoryImplementor factory) {
47-
return new ReactiveOracleSqlAstTranslator<>( factory, optionalTableUpdate )
48-
.createMergeOperation( optionalTableUpdate );
49-
}
50-
51-
@Override
52-
public SqlAstTranslatorFactory getSqlAstTranslatorFactory() {
53-
return new StandardSqlAstTranslatorFactory() {
54-
@Override
55-
protected <T extends JdbcOperation> SqlAstTranslator<T> buildTranslator(SessionFactoryImplementor sessionFactory, Statement statement) {
56-
return new ReactiveOracleSqlAstTranslator<>( sessionFactory, statement );
57-
}
58-
};
59-
}
60-
};
61-
}
62-
return dialect;
28+
return database.createDialect( info );
6329
}
6430
}
6531

hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/jdbc/env/internal/ReactiveJdbcEnvironment.java

-14
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,13 @@
55
*/
66
package org.hibernate.reactive.engine.jdbc.env.internal;
77

8-
import java.sql.DatabaseMetaData;
9-
import java.sql.SQLException;
10-
118
import org.hibernate.dialect.Dialect;
129
import org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl;
1310
import org.hibernate.service.spi.ServiceRegistryImplementor;
14-
import org.hibernate.sql.ast.SqlAstTranslatorFactory;
1511

1612
public class ReactiveJdbcEnvironment extends JdbcEnvironmentImpl {
1713

1814
public ReactiveJdbcEnvironment(ServiceRegistryImplementor registry, Dialect dialect) {
1915
super( registry, dialect );
2016
}
21-
22-
@Deprecated
23-
public ReactiveJdbcEnvironment(ServiceRegistryImplementor registry, Dialect dialect, DatabaseMetaData metaData) throws SQLException {
24-
super( registry, dialect, metaData );
25-
}
26-
27-
@Override
28-
public SqlAstTranslatorFactory getSqlAstTranslatorFactory() {
29-
return super.getSqlAstTranslatorFactory();
30-
}
3117
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/jdbc/env/internal/ReactiveMutationExecutor.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
import org.hibernate.dialect.DB2Dialect;
1212
import org.hibernate.dialect.Dialect;
13-
import org.hibernate.dialect.DialectDelegateWrapper;
1413
import org.hibernate.dialect.MySQLDialect;
1514
import org.hibernate.dialect.OracleDialect;
1615
import org.hibernate.dialect.SQLServerDialect;
@@ -104,15 +103,14 @@ default CompletionStage<Void> performReactiveBatchedOperations(
104103
private static String createInsert(String insertSql, String identifierColumnName, Dialect dialect) {
105104
String sql = insertSql;
106105
final String sqlEnd = " returning " + identifierColumnName;
107-
Dialect realDialect = DialectDelegateWrapper.extractRealDialect( dialect );
108-
if ( realDialect instanceof MySQLDialect ) {
106+
if ( dialect instanceof MySQLDialect ) {
109107
// For some reason ORM generates a query with an invalid syntax
110108
int index = sql.lastIndexOf( sqlEnd );
111109
return index > -1
112110
? sql.substring( 0, index )
113111
: sql;
114112
}
115-
if ( realDialect instanceof SQLServerDialect ) {
113+
if ( dialect instanceof SQLServerDialect ) {
116114
int index = sql.lastIndexOf( sqlEnd );
117115
// FIXME: this is a hack for HHH-16365
118116
if ( index > -1 ) {
@@ -128,12 +126,12 @@ private static String createInsert(String insertSql, String identifierColumnName
128126
}
129127
return sql;
130128
}
131-
if ( realDialect instanceof DB2Dialect ) {
129+
if ( dialect instanceof DB2Dialect ) {
132130
// ORM query: select id from new table ( insert into IntegerTypeEntity values ( ))
133131
// Correct : select id from new table ( insert into LongTypeEntity (id) values (default))
134132
return sql.replace( " values ( ))", " (" + identifierColumnName + ") values (default))" );
135133
}
136-
if ( realDialect instanceof OracleDialect ) {
134+
if ( dialect instanceof OracleDialect ) {
137135
final String valuesStr = " values ( )";
138136
int index = sql.lastIndexOf( sqlEnd );
139137
// remove "returning id" since it's added via

hibernate-reactive-core/src/main/java/org/hibernate/reactive/id/insert/ReactiveAbstractReturningDelegate.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.hibernate.dialect.CockroachDialect;
1313
import org.hibernate.dialect.DB2Dialect;
1414
import org.hibernate.dialect.Dialect;
15-
import org.hibernate.dialect.DialectDelegateWrapper;
1615
import org.hibernate.dialect.MySQLDialect;
1716
import org.hibernate.dialect.OracleDialect;
1817
import org.hibernate.dialect.SQLServerDialect;
@@ -89,15 +88,14 @@ && getPersister().getFactory().getJdbcServices().getDialect() instanceof Cockroa
8988
private static String createInsert(String insertSql, String identifierColumnName, Dialect dialect) {
9089
String sql = insertSql;
9190
final String sqlEnd = " returning " + identifierColumnName;
92-
Dialect realDialect = DialectDelegateWrapper.extractRealDialect( dialect );
93-
if ( realDialect instanceof MySQLDialect ) {
91+
if ( dialect instanceof MySQLDialect ) {
9492
// For some reason ORM generates a query with an invalid syntax
9593
int index = sql.lastIndexOf( sqlEnd );
9694
return index > -1
9795
? sql.substring( 0, index )
9896
: sql;
9997
}
100-
if ( realDialect instanceof SQLServerDialect ) {
98+
if ( dialect instanceof SQLServerDialect ) {
10199
int index = sql.lastIndexOf( sqlEnd );
102100
// FIXME: this is a hack for HHH-16365
103101
if ( index > -1 ) {
@@ -113,12 +111,12 @@ private static String createInsert(String insertSql, String identifierColumnName
113111
}
114112
return sql;
115113
}
116-
if ( realDialect instanceof DB2Dialect ) {
114+
if ( dialect instanceof DB2Dialect ) {
117115
// ORM query: select id from new table ( insert into IntegerTypeEntity values ( ))
118116
// Correct : select id from new table ( insert into LongTypeEntity (id) values (default))
119117
return sql.replace( " values ( ))", " (" + identifierColumnName + ") values (default))" );
120118
}
121-
if ( realDialect instanceof OracleDialect ) {
119+
if ( dialect instanceof OracleDialect ) {
122120
final String valuesStr = " values ( )";
123121
int index = sql.lastIndexOf( sqlEnd );
124122
// remove "returning id" since it's added via

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

+6-54
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,13 @@
1212
import org.hibernate.reactive.persister.entity.mutation.ReactiveMergeCoordinator;
1313
import org.hibernate.reactive.persister.entity.mutation.ReactiveScopedUpdateCoordinator;
1414
import org.hibernate.reactive.persister.entity.mutation.ReactiveUpdateCoordinator;
15+
import org.hibernate.reactive.sql.model.ReactiveDeleteOrUpsertOperation;
1516
import org.hibernate.reactive.sql.model.ReactiveOptionalTableUpdateOperation;
16-
import org.hibernate.sql.model.ModelMutationLogging;
1717
import org.hibernate.sql.model.MutationOperation;
18-
import org.hibernate.sql.model.MutationOperationGroup;
1918
import org.hibernate.sql.model.ValuesAnalysis;
20-
import org.hibernate.sql.model.ast.MutationGroup;
2119
import org.hibernate.sql.model.ast.TableMutation;
22-
import org.hibernate.sql.model.internal.MutationOperationGroupFactory;
2320
import org.hibernate.sql.model.internal.OptionalTableUpdate;
21+
import org.hibernate.sql.model.jdbc.DeleteOrUpsertOperation;
2422
import org.hibernate.sql.model.jdbc.OptionalTableUpdateOperation;
2523

2624
public class ReactiveMergeCoordinatorStandardScopeFactory extends MergeCoordinator
@@ -44,61 +42,15 @@ public ReactiveScopedUpdateCoordinator makeScopedCoordinator() {
4442
);
4543
}
4644

47-
// We override the whole method but we just need to plug in our custom createOperation(...) method
4845
@Override
49-
protected MutationOperationGroup createOperationGroup(ValuesAnalysis valuesAnalysis, MutationGroup mutationGroup) {
50-
final int numberOfTableMutations = mutationGroup.getNumberOfTableMutations();
51-
switch ( numberOfTableMutations ) {
52-
case 0:
53-
return MutationOperationGroupFactory.noOperations( mutationGroup );
54-
case 1: {
55-
MutationOperation operation = createOperation( valuesAnalysis, mutationGroup.getSingleTableMutation() );
56-
return operation == null
57-
? MutationOperationGroupFactory.noOperations( mutationGroup )
58-
: MutationOperationGroupFactory.singleOperation( mutationGroup, operation );
59-
}
60-
default: {
61-
MutationOperation[] operations = new MutationOperation[numberOfTableMutations];
62-
int outputIndex = 0;
63-
int skipped = 0;
64-
for ( int i = 0; i < mutationGroup.getNumberOfTableMutations(); i++ ) {
65-
final TableMutation<?> tableMutation = mutationGroup.getTableMutation( i );
66-
MutationOperation operation = createOperation( valuesAnalysis, tableMutation );
67-
if ( operation != null ) {
68-
operations[outputIndex++] = operation;
69-
}
70-
else {
71-
skipped++;
72-
ModelMutationLogging.MODEL_MUTATION_LOGGER.debugf(
73-
"Skipping table update - %s",
74-
tableMutation.getTableName()
75-
);
76-
}
77-
}
78-
if ( skipped != 0 ) {
79-
final MutationOperation[] trimmed = new MutationOperation[outputIndex];
80-
System.arraycopy( operations, 0, trimmed, 0, outputIndex );
81-
operations = trimmed;
82-
}
83-
return MutationOperationGroupFactory.manyOperations(
84-
mutationGroup.getMutationType(),
85-
entityPersister,
86-
operations
87-
);
88-
}
89-
}
90-
}
91-
92-
// FIXME: We could add this method in ORM and override only this code
9346
protected MutationOperation createOperation(ValuesAnalysis valuesAnalysis, TableMutation<?> singleTableMutation) {
9447
MutationOperation operation = singleTableMutation.createMutationOperation( valuesAnalysis, factory() );
9548
if ( operation instanceof OptionalTableUpdateOperation ) {
9649
// We need to plug in our own reactive operation
97-
return new ReactiveOptionalTableUpdateOperation(
98-
operation.getMutationTarget(),
99-
(OptionalTableUpdate) singleTableMutation,
100-
factory()
101-
);
50+
return new ReactiveOptionalTableUpdateOperation( operation.getMutationTarget(), (OptionalTableUpdate) singleTableMutation, factory() );
51+
}
52+
if ( operation instanceof DeleteOrUpsertOperation ) {
53+
return new ReactiveDeleteOrUpsertOperation( (DeleteOrUpsertOperation) operation );
10254
}
10355
return operation;
10456
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/impl/Parameters.java

-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
import org.hibernate.dialect.CockroachDialect;
1111
import org.hibernate.dialect.Dialect;
12-
import org.hibernate.dialect.DialectDelegateWrapper;
1312
import org.hibernate.dialect.PostgreSQLDialect;
1413
import org.hibernate.dialect.SQLServerDialect;
1514

@@ -40,9 +39,6 @@ protected Parameters(String paramPrefix) {
4039
}
4140

4241
public static Parameters instance(Dialect dialect) {
43-
if ( dialect instanceof DialectDelegateWrapper ) {
44-
dialect = ( (DialectDelegateWrapper) dialect ).getWrappedDialect();
45-
}
4642
if ( dialect instanceof PostgreSQLDialect || dialect instanceof CockroachDialect ) {
4743
return PostgresParameters.INSTANCE;
4844
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/impl/ReactiveTypeContributor.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.hibernate.dialect.CockroachDialect;
2222
import org.hibernate.dialect.DB2Dialect;
2323
import org.hibernate.dialect.Dialect;
24-
import org.hibernate.dialect.DialectDelegateWrapper;
2524
import org.hibernate.dialect.MySQLDialect;
2625
import org.hibernate.dialect.OracleDialect;
2726
import org.hibernate.dialect.PostgreSQLDialect;
@@ -106,7 +105,7 @@ private void registerReactiveChanges(TypeContributions typeContributions, Servic
106105
}
107106

108107
private Dialect dialect(ServiceRegistry serviceRegistry) {
109-
return DialectDelegateWrapper.extractRealDialect( serviceRegistry.getService( JdbcEnvironment.class ).getDialect() );
108+
return serviceRegistry.getService( JdbcEnvironment.class ).getDialect();
110109
}
111110

112111
/**

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

+1-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import org.hibernate.boot.registry.StandardServiceInitiator;
1212
import org.hibernate.dialect.CockroachDialect;
1313
import org.hibernate.dialect.Dialect;
14-
import org.hibernate.dialect.DialectDelegateWrapper;
1514
import org.hibernate.dialect.PostgreSQLDialect;
1615
import org.hibernate.dialect.SQLServerDialect;
1716
import org.hibernate.engine.jdbc.spi.JdbcServices;
@@ -39,8 +38,7 @@ public class NativeParametersHandling implements StandardServiceInitiator<Parame
3938
@Override
4039
public ParameterMarkerStrategy initiateService(Map<String, Object> configurationValues, ServiceRegistryImplementor registry) {
4140
final Dialect dialect = registry.getService( JdbcServices.class ).getDialect();
42-
final Dialect realDialect = DialectDelegateWrapper.extractRealDialect( dialect );
43-
final ParameterMarkerStrategy renderer = recommendRendered( realDialect );
41+
final ParameterMarkerStrategy renderer = recommendRendered( dialect );
4442
LOG.debugf( "Initializing service JdbcParameterRenderer with implementation: %s", renderer.getClass() );
4543
return renderer;
4644
}

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

+1-7
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
import org.hibernate.boot.model.relational.SqlStringGenerationContext;
1010
import org.hibernate.dialect.CockroachDialect;
1111
import org.hibernate.dialect.Dialect;
12-
import org.hibernate.dialect.DialectDelegateWrapper;
13-
import org.hibernate.dialect.MariaDBDialect;
1412
import org.hibernate.dialect.MySQLDialect;
1513
import org.hibernate.dialect.OracleDialect;
1614
import org.hibernate.dialect.PostgreSQLDialect;
@@ -60,15 +58,11 @@ public ExtractionContext createExtractionContext(
6058

6159
public InformationExtractor createInformationExtractor(ExtractionContext extractionContext) {
6260
Dialect dialect = extractionContext.getJdbcEnvironment().getDialect();
63-
//Allow for wrapped cases:
64-
if ( dialect instanceof DialectDelegateWrapper ) {
65-
dialect = ( (DialectDelegateWrapper) dialect ).getWrappedDialect();
66-
}
6761
//Now detect the kind of Dialect:
6862
if ( dialect instanceof PostgreSQLDialect || dialect instanceof CockroachDialect ) {
6963
return new PostgreSqlReactiveInformationExtractorImpl( extractionContext );
7064
}
71-
if ( dialect instanceof MySQLDialect || dialect instanceof MariaDBDialect ) {
65+
if ( dialect instanceof MySQLDialect ) {
7266
return new MySqlReactiveInformationExtractorImpl( extractionContext );
7367
}
7468
if ( dialect instanceof SQLServerDialect ) {

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

+1-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import java.util.function.Function;
1414

1515
import org.hibernate.dialect.Dialect;
16-
import org.hibernate.dialect.DialectDelegateWrapper;
1716
import org.hibernate.engine.jdbc.spi.JdbcServices;
1817
import org.hibernate.engine.spi.SharedSessionContractImplementor;
1918
import org.hibernate.query.spi.QueryOptions;
@@ -128,7 +127,7 @@ private static String finalSql(
128127
.getSessionFactoryOptions()
129128
.isCommentsEnabled()
130129
);
131-
final Dialect dialect = DialectDelegateWrapper.extractRealDialect( executionContext.getSession().getJdbcServices().getDialect() );
130+
final Dialect dialect = executionContext.getSession().getJdbcServices().getDialect();
132131
return Parameters.instance( dialect ).process( sql );
133132
}
134133
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/model/ReactiveDeleteOrUpsertOperation.java

+7-10
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@
3838
public class ReactiveDeleteOrUpsertOperation extends DeleteOrUpsertOperation
3939
implements ReactiveSelfExecutingUpdateOperation {
4040
private static final Log LOG = make( Log.class, lookup() );
41-
private final OptionalTableUpdate upsert;
42-
private final UpsertOperation upsertOperation;
4341

4442
public ReactiveDeleteOrUpsertOperation(
4543
EntityMutationTarget mutationTarget,
4644
EntityTableMapping tableMapping,
4745
UpsertOperation upsertOperation,
4846
OptionalTableUpdate optionalTableUpdate) {
4947
super( mutationTarget, tableMapping, upsertOperation, optionalTableUpdate );
50-
this.upsert = optionalTableUpdate;
51-
this.upsertOperation = upsertOperation;
48+
}
49+
50+
public ReactiveDeleteOrUpsertOperation(DeleteOrUpsertOperation original) {
51+
super( original );
5252
}
5353

5454
@Override
@@ -92,10 +92,7 @@ private CompletionStage<Void> performReactiveUpsert(
9292
final String tableName = getTableDetails().getTableName();
9393
MODEL_MUTATION_LOGGER.tracef( "#performReactiveUpsert(%s)", tableName );
9494

95-
final PreparedStatementGroupSingleTable statementGroup = new PreparedStatementGroupSingleTable(
96-
upsertOperation,
97-
session
98-
);
95+
final PreparedStatementGroupSingleTable statementGroup = new PreparedStatementGroupSingleTable( getUpsertOperation(), session );
9996
final PreparedStatementDetails statementDetails = statementGroup.resolvePreparedStatementDetails( tableName );
10097

10198
session.getJdbcServices().getSqlStatementLogger().logStatement( statementDetails.getSqlString() );
@@ -123,10 +120,10 @@ private CompletionStage<Void> performReactiveDelete(
123120
MODEL_MUTATION_LOGGER.tracef( "#performReactiveDelete(%s)", tableName );
124121

125122
final TableDeleteStandard upsertDeleteAst = new TableDeleteStandard(
126-
upsert.getMutatingTable(),
123+
getOptionalTableUpdate().getMutatingTable(),
127124
getMutationTarget(),
128125
"upsert delete",
129-
upsert.getKeyBindings(),
126+
getOptionalTableUpdate().getKeyBindings(),
130127
emptyList(),
131128
emptyList()
132129
);

0 commit comments

Comments
 (0)