Skip to content

Commit 4c72c94

Browse files
committed
[#1768] Refactoring
1 parent 859df47 commit 4c72c94

File tree

7 files changed

+90
-168
lines changed

7 files changed

+90
-168
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/dialect/ReactiveOracleSqlAstTranslator.java

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -45,24 +45,7 @@ public MutationOperation createMergeOperation(OptionalTableUpdate optionalTableU
4545
);
4646
}
4747

48-
public MutationOperation createReactiveMergeOperation(OptionalTableUpdate optionalTableUpdate) {
49-
renderUpsertStatement( optionalTableUpdate );
50-
51-
final UpsertOperation upsertOperation = new UpsertOperation(
52-
optionalTableUpdate.getMutatingTable().getTableMapping(),
53-
optionalTableUpdate.getMutationTarget(),
54-
getSql(),
55-
getParameterBinders()
56-
);
57-
58-
return new ReactiveDeleteOrUpsertOperation(
59-
optionalTableUpdate.getMutationTarget(),
60-
(EntityTableMapping) optionalTableUpdate.getMutatingTable().getTableMapping(),
61-
upsertOperation,
62-
optionalTableUpdate
63-
);
64-
}
65-
48+
// FIXME: Copy and paste from ORM
6649
private void renderUpsertStatement(OptionalTableUpdate optionalTableUpdate) {
6750
// template:
6851
//
@@ -95,7 +78,8 @@ protected boolean rendersTableReferenceAlias(Clause clause) {
9578
final Dialect realDialect = DialectDelegateWrapper.extractRealDialect( getDialect() );
9679
return realDialect.getDmlTargetColumnQualifierSupport() == DmlTargetColumnQualifierSupport.TABLE_ALIAS;
9780
}
81+
default:
82+
return true;
9883
}
99-
return true;
10084
}
10185
}

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,15 @@ public MutationOperation createOptionalTableUpdateOperation(
4444
EntityMutationTarget mutationTarget,
4545
OptionalTableUpdate optionalTableUpdate,
4646
SessionFactoryImplementor factory) {
47-
final ReactiveOracleSqlAstTranslator<?> translator = new ReactiveOracleSqlAstTranslator<>(
48-
factory,
49-
optionalTableUpdate
50-
);
51-
return translator.createReactiveMergeOperation( optionalTableUpdate );
47+
return new ReactiveOracleSqlAstTranslator<>( factory, optionalTableUpdate )
48+
.createMergeOperation( optionalTableUpdate );
5249
}
5350

5451
@Override
5552
public SqlAstTranslatorFactory getSqlAstTranslatorFactory() {
5653
return new StandardSqlAstTranslatorFactory() {
5754
@Override
58-
protected <T extends JdbcOperation> SqlAstTranslator<T> buildTranslator(
59-
SessionFactoryImplementor sessionFactory, Statement statement) {
55+
protected <T extends JdbcOperation> SqlAstTranslator<T> buildTranslator(SessionFactoryImplementor sessionFactory, Statement statement) {
6056
return new ReactiveOracleSqlAstTranslator<>( sessionFactory, statement );
6157
}
6258
};

hibernate-reactive-core/src/main/java/org/hibernate/reactive/engine/jdbc/mutation/internal/ReactiveMutationExecutorSingleSelfExecuting.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,25 @@
66
package org.hibernate.reactive.engine.jdbc.mutation.internal;
77

88

9-
import java.lang.invoke.MethodHandles;
109
import java.util.concurrent.CompletionStage;
1110

1211
import org.hibernate.engine.jdbc.mutation.TableInclusionChecker;
1312
import org.hibernate.engine.jdbc.mutation.internal.MutationExecutorSingleSelfExecuting;
1413
import org.hibernate.engine.spi.SharedSessionContractImplementor;
1514
import org.hibernate.reactive.engine.jdbc.env.internal.ReactiveMutationExecutor;
1615
import org.hibernate.reactive.logging.impl.Log;
17-
import org.hibernate.reactive.logging.impl.LoggerFactory;
1816
import org.hibernate.reactive.sql.model.ReactiveSelfExecutingUpdateOperation;
1917
import org.hibernate.sql.model.SelfExecutingUpdateOperation;
2018
import org.hibernate.sql.model.ValuesAnalysis;
2119

20+
import static java.lang.invoke.MethodHandles.lookup;
21+
import static org.hibernate.reactive.logging.impl.LoggerFactory.make;
2222
import static org.hibernate.reactive.util.impl.CompletionStages.voidFuture;
2323

2424
public class ReactiveMutationExecutorSingleSelfExecuting extends MutationExecutorSingleSelfExecuting
2525
implements ReactiveMutationExecutor {
2626

27-
private static final Log LOG = LoggerFactory.make( Log.class, MethodHandles.lookup() );
27+
private static final Log LOG = make( Log.class, lookup() );
2828

2929
private final SelfExecutingUpdateOperation operation;
3030

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@
2828
public class ReactiveMergeCoordinatorStandardScopeFactory extends MergeCoordinator
2929
implements ReactiveUpdateCoordinator {
3030

31-
public ReactiveMergeCoordinatorStandardScopeFactory(AbstractEntityPersister entityPersister, SessionFactoryImplementor factory) {
31+
public ReactiveMergeCoordinatorStandardScopeFactory(
32+
AbstractEntityPersister entityPersister,
33+
SessionFactoryImplementor factory) {
3234
super( entityPersister, factory );
3335
}
3436

@@ -37,10 +39,10 @@ public ReactiveScopedUpdateCoordinator makeScopedCoordinator() {
3739
return new ReactiveMergeCoordinator(
3840
entityPersister(),
3941
factory(),
40-
this.getStaticUpdateGroup(),
41-
this.getBatchKey(),
42-
this.getVersionUpdateGroup(),
43-
this.getVersionUpdateBatchkey()
42+
getStaticUpdateGroup(),
43+
getBatchKey(),
44+
getVersionUpdateGroup(),
45+
getVersionUpdateBatchkey()
4446
);
4547
}
4648

@@ -79,7 +81,11 @@ protected MutationOperationGroup createOperationGroup(ValuesAnalysis valuesAnaly
7981
System.arraycopy( operations, 0, trimmed, 0, outputIndex );
8082
operations = trimmed;
8183
}
82-
return MutationOperationGroupFactory.manyOperations( mutationGroup.getMutationType(), entityPersister, operations );
84+
return MutationOperationGroupFactory.manyOperations(
85+
mutationGroup.getMutationType(),
86+
entityPersister,
87+
operations
88+
);
8389
}
8490
}
8591
}
@@ -95,11 +101,11 @@ protected MutationOperation createOperation(ValuesAnalysis valuesAnalysis, Table
95101
factory()
96102
);
97103
}
98-
else if ( operation instanceof DeleteOrUpsertOperation &&
99-
factory().getJdbcServices().getDialect() instanceof OracleDialect ) {
100-
OracleDialect dialect = ((OracleDialect)factory().getJdbcServices().getDialect());
104+
if ( operation instanceof DeleteOrUpsertOperation
105+
&& factory().getJdbcServices().getDialect() instanceof OracleDialect ) {
106+
OracleDialect dialect = ( (OracleDialect) factory().getJdbcServices().getDialect() );
101107
return dialect.createOptionalTableUpdateOperation(
102-
( (OptionalTableUpdate)operation).getMutationTarget(),
108+
( (OptionalTableUpdate) operation ).getMutationTarget(),
103109
(OptionalTableUpdate) operation,
104110
factory()
105111
);

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/mutation/ReactiveMergeCoordinator.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
import org.hibernate.persister.entity.mutation.EntityTableMapping;
1212
import org.hibernate.sql.model.MutationOperation;
1313
import org.hibernate.sql.model.MutationOperationGroup;
14-
import org.hibernate.sql.model.ValuesAnalysis;
15-
import org.hibernate.sql.model.ast.MutationGroup;
1614
import org.hibernate.sql.model.ast.builder.AbstractTableUpdateBuilder;
1715
import org.hibernate.sql.model.ast.builder.TableMergeBuilder;
1816

@@ -35,10 +33,4 @@ public ReactiveMergeCoordinator(
3533
protected <O extends MutationOperation> AbstractTableUpdateBuilder<O> newTableUpdateBuilder(EntityTableMapping tableMapping) {
3634
return new TableMergeBuilder<>( entityPersister(), tableMapping, factory() );
3735
}
38-
39-
@Override
40-
protected MutationOperationGroup createOperationGroup(ValuesAnalysis valuesAnalysis, MutationGroup mutationGroup) {
41-
return super.createOperationGroup( valuesAnalysis, mutationGroup );
42-
}
43-
4436
}

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

Lines changed: 36 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55
*/
66
package org.hibernate.reactive.sql.model;
77

8-
import java.sql.PreparedStatement;
9-
import java.sql.SQLException;
10-
import java.util.Collections;
118
import java.util.concurrent.CompletionStage;
129

1310
import org.hibernate.engine.jdbc.mutation.JdbcValueBindings;
@@ -32,18 +29,18 @@
3229
import org.hibernate.sql.model.jdbc.JdbcDeleteMutation;
3330
import org.hibernate.sql.model.jdbc.UpsertOperation;
3431

35-
import org.jboss.logging.Logger;
36-
3732
import static java.lang.invoke.MethodHandles.lookup;
33+
import static java.util.Collections.emptyList;
3834
import static org.hibernate.reactive.logging.impl.LoggerFactory.make;
3935
import static org.hibernate.reactive.util.impl.CompletionStages.voidFuture;
4036
import static org.hibernate.sql.model.ModelMutationLogging.MODEL_MUTATION_LOGGER;
4137

42-
public class ReactiveDeleteOrUpsertOperation extends DeleteOrUpsertOperation implements ReactiveSelfExecutingUpdateOperation {
38+
public class ReactiveDeleteOrUpsertOperation extends DeleteOrUpsertOperation
39+
implements ReactiveSelfExecutingUpdateOperation {
4340
private static final Log LOG = make( Log.class, lookup() );
4441
private final OptionalTableUpdate upsert;
4542
private final UpsertOperation upsertOperation;
46-
private final UpsertStatementInfo upsertStatementInfo;
43+
4744
public ReactiveDeleteOrUpsertOperation(
4845
EntityMutationTarget mutationTarget,
4946
EntityTableMapping tableMapping,
@@ -52,7 +49,6 @@ public ReactiveDeleteOrUpsertOperation(
5249
super( mutationTarget, tableMapping, upsertOperation, optionalTableUpdate );
5350
this.upsert = optionalTableUpdate;
5451
this.upsertOperation = upsertOperation;
55-
this.upsertStatementInfo = new UpsertStatementInfo( );
5652
}
5753

5854
@Override
@@ -76,39 +72,33 @@ public CompletionStage<Void> performReactiveMutation(
7672
return doReactiveMutation( getTableDetails(), jdbcValueBindings, valuesAnalysis, session );
7773
}
7874

79-
/**
80-
*
81-
* @see DeleteOrUpsertOperation#performMutation(JdbcValueBindings, ValuesAnalysis, SharedSessionContractImplementor)
82-
* @param tableMapping
83-
* @param jdbcValueBindings
84-
* @param valuesAnalysis
85-
* @param session
86-
* @return
87-
*/
8875
private CompletionStage<Void> doReactiveMutation(
8976
TableMapping tableMapping,
9077
JdbcValueBindings jdbcValueBindings,
9178
UpdateValuesAnalysis valuesAnalysis,
9279
SharedSessionContractImplementor session) {
9380

9481
return voidFuture()
95-
.thenCompose( v -> {
96-
if ( !valuesAnalysis.getTablesWithNonNullValues().contains( tableMapping ) ) {
97-
return performReactiveDelete( jdbcValueBindings, session );
98-
}
99-
else {
100-
return performReactiveUpsert( jdbcValueBindings,session );
101-
}
102-
} )
82+
.thenCompose( v -> !valuesAnalysis.getTablesWithNonNullValues().contains( tableMapping )
83+
? performReactiveDelete( jdbcValueBindings, session )
84+
: performReactiveUpsert( jdbcValueBindings, session )
85+
)
10386
.whenComplete( (o, throwable) -> jdbcValueBindings.afterStatement( tableMapping ) );
10487
}
10588

106-
private CompletionStage<Void> performReactiveUpsert(JdbcValueBindings jdbcValueBindings, SharedSessionContractImplementor session) {
107-
final PreparedStatementGroupSingleTable statementGroup = new PreparedStatementGroupSingleTable( upsertOperation, session );
108-
final PreparedStatementDetails statementDetails = statementGroup.resolvePreparedStatementDetails( getTableDetails().getTableName() );
109-
upsertStatementInfo.setStatementDetails( statementDetails );
89+
private CompletionStage<Void> performReactiveUpsert(
90+
JdbcValueBindings jdbcValueBindings,
91+
SharedSessionContractImplementor session) {
92+
final String tableName = getTableDetails().getTableName();
93+
MODEL_MUTATION_LOGGER.tracef( "#performReactiveUpsert(%s)", tableName );
11094

111-
// If we get here the statement is needed - make sure it is resolved
95+
final PreparedStatementGroupSingleTable statementGroup = new PreparedStatementGroupSingleTable(
96+
upsertOperation,
97+
session
98+
);
99+
final PreparedStatementDetails statementDetails = statementGroup.resolvePreparedStatementDetails( tableName );
100+
101+
session.getJdbcServices().getSqlStatementLogger().logStatement( statementDetails.getSqlString() );
112102
Object[] params = PreparedStatementAdaptor.bind( statement -> {
113103
PreparedStatementDetails details = new PrepareStatementDetailsAdaptor(
114104
statementDetails,
@@ -119,40 +109,26 @@ private CompletionStage<Void> performReactiveUpsert(JdbcValueBindings jdbcValueB
119109
} );
120110

121111
ReactiveConnection reactiveConnection = ( (ReactiveConnectionSupplier) session ).getReactiveConnection();
122-
String sqlString = statementDetails.getSqlString();
123112
return reactiveConnection
124-
.update( sqlString, params ).thenCompose(this::checkUpsertResults);
125-
}
126-
127-
private CompletionStage<Void> checkUpsertResults( Integer rowCount ) {
128-
if ( rowCount > 0 ) {
129-
try {
130-
upsert.getExpectation()
131-
.verifyOutcome(
132-
rowCount,
133-
upsertStatementInfo.getStatementDetails(),
134-
-1,
135-
upsertStatementInfo.getStatementSqlString()
136-
);
137-
return voidFuture();
138-
}
139-
catch (SQLException e) {
140-
LOG.log( Logger.Level.ERROR, e );
141-
}
142-
}
143-
return voidFuture();
113+
.update( statementDetails.getSqlString(), params )
114+
.thenAccept( rowCount -> MODEL_MUTATION_LOGGER
115+
.tracef( "`%s` rows upserted into `%s`", rowCount, getTableDetails().getTableName() )
116+
);
144117
}
145118

146-
private CompletionStage<Void> performReactiveDelete(JdbcValueBindings jdbcValueBindings, SharedSessionContractImplementor session) {
147-
MODEL_MUTATION_LOGGER.tracef( "#performDelete(%s)", getTableDetails().getTableName() );
119+
private CompletionStage<Void> performReactiveDelete(
120+
JdbcValueBindings jdbcValueBindings,
121+
SharedSessionContractImplementor session) {
122+
final String tableName = getTableDetails().getTableName();
123+
MODEL_MUTATION_LOGGER.tracef( "#performReactiveDelete(%s)", tableName );
148124

149125
final TableDeleteStandard upsertDeleteAst = new TableDeleteStandard(
150126
upsert.getMutatingTable(),
151127
getMutationTarget(),
152128
"upsert delete",
153129
upsert.getKeyBindings(),
154-
Collections.emptyList(),
155-
Collections.emptyList()
130+
emptyList(),
131+
emptyList()
156132
);
157133

158134
final SqlAstTranslator<JdbcDeleteMutation> translator = session
@@ -163,33 +139,18 @@ private CompletionStage<Void> performReactiveDelete(JdbcValueBindings jdbcValueB
163139
final JdbcDeleteMutation upsertDelete = translator.translate( null, MutationQueryOptions.INSTANCE );
164140

165141
final PreparedStatementGroupSingleTable statementGroup = new PreparedStatementGroupSingleTable( upsertDelete, session );
166-
final PreparedStatementDetails statementDetails = statementGroup.resolvePreparedStatementDetails( getTableDetails().getTableName() );
142+
final PreparedStatementDetails statementDetails = statementGroup.resolvePreparedStatementDetails( tableName );
143+
144+
session.getJdbcServices().getSqlStatementLogger().logStatement( statementDetails.getSqlString() );
167145
Object[] params = PreparedStatementAdaptor.bind( statement -> {
168146
PreparedStatementDetails details = new PrepareStatementDetailsAdaptor( statementDetails, statement, session.getJdbcServices() );
169147
jdbcValueBindings.beforeStatement( details );
170148
} );
171-
session.getJdbcServices().getSqlStatementLogger().logStatement( statementDetails.getSqlString() );
172149

173150
ReactiveConnection reactiveConnection = ( (ReactiveConnectionSupplier) session ).getReactiveConnection();
174151
String sqlString = statementDetails.getSqlString();
175152
return reactiveConnection
176-
.update( sqlString, params ).thenCompose(this::checkUpsertResults);
177-
}
178-
179-
static class UpsertStatementInfo {
180-
181-
PreparedStatementDetails statementDetails;
182-
183-
public void setStatementDetails(PreparedStatementDetails statementDetails) {
184-
this.statementDetails = statementDetails;
185-
}
186-
187-
public PreparedStatement getStatementDetails() {
188-
return statementDetails.getStatement();
189-
}
190-
191-
public String getStatementSqlString() {
192-
return statementDetails.getSqlString();
193-
}
153+
.update( sqlString, params )
154+
.thenAccept( rowCount -> MODEL_MUTATION_LOGGER.tracef( "`%s` rows upsert-deleted from `%s`", rowCount, tableName ) );
194155
}
195156
}

0 commit comments

Comments
 (0)