Skip to content

Commit 073b385

Browse files
committed
Fix SecondaryTableTest
1 parent 6316ff7 commit 073b385

File tree

1 file changed

+61
-6
lines changed

1 file changed

+61
-6
lines changed

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

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,11 @@
1414
import org.hibernate.engine.jdbc.mutation.OperationResultChecker;
1515
import org.hibernate.engine.jdbc.mutation.TableInclusionChecker;
1616
import org.hibernate.engine.jdbc.mutation.group.PreparedStatementDetails;
17+
import org.hibernate.engine.jdbc.mutation.group.PreparedStatementGroup;
1718
import org.hibernate.engine.jdbc.mutation.internal.MutationExecutorStandard;
1819
import org.hibernate.engine.spi.SharedSessionContractImplementor;
20+
import org.hibernate.reactive.adaptor.impl.PrepareStatementDetailsAdaptor;
21+
import org.hibernate.reactive.adaptor.impl.PreparedStatementAdaptor;
1922
import org.hibernate.reactive.engine.jdbc.env.internal.ReactiveMutationExecutor;
2023
import org.hibernate.reactive.pool.ReactiveConnection;
2124
import org.hibernate.reactive.session.ReactiveConnectionSupplier;
@@ -51,8 +54,8 @@ public CompletionStage<Void> performReactiveBatchedOperations(
5154
ValuesAnalysis valuesAnalysis,
5255
TableInclusionChecker inclusionChecker, OperationResultChecker resultChecker,
5356
SharedSessionContractImplementor session) {
54-
return ReactiveMutationExecutor.super.performReactiveBatchedOperations( valuesAnalysis, inclusionChecker,
55-
resultChecker, session);
57+
return ReactiveMutationExecutor.super
58+
.performReactiveBatchedOperations( valuesAnalysis, inclusionChecker, resultChecker, session);
5659
}
5760

5861
@Override
@@ -79,6 +82,57 @@ protected void performBatchedOperations(
7982
throw LOG.nonReactiveMethodCall( "performReactiveBatchedOperations" );
8083
}
8184

85+
@Override
86+
public CompletionStage<Void> performReactiveNonBatchedOperations(
87+
ValuesAnalysis valuesAnalysis,
88+
TableInclusionChecker inclusionChecker,
89+
OperationResultChecker resultChecker,
90+
SharedSessionContractImplementor session) {
91+
92+
if ( getNonBatchedStatementGroup() == null || getNonBatchedStatementGroup().getNumberOfStatements() <= 0 ) {
93+
return voidFuture();
94+
}
95+
96+
PreparedStatementGroup nonBatchedStatementGroup = getNonBatchedStatementGroup();
97+
final OperationsForEach forEach = new OperationsForEach( inclusionChecker, resultChecker, session, getJdbcValueBindings() );
98+
nonBatchedStatementGroup.forEachStatement( forEach::add );
99+
return forEach.buildLoop();
100+
}
101+
102+
private class OperationsForEach {
103+
104+
private final TableInclusionChecker inclusionChecker;
105+
private final OperationResultChecker resultChecker;
106+
private final SharedSessionContractImplementor session;
107+
private final JdbcValueBindings jdbcValueBindings;
108+
109+
private CompletionStage<Void> loop = voidFuture();
110+
111+
public OperationsForEach(
112+
TableInclusionChecker inclusionChecker,
113+
OperationResultChecker resultChecker,
114+
SharedSessionContractImplementor session,
115+
JdbcValueBindings jdbcValueBindings) {
116+
this.inclusionChecker = inclusionChecker;
117+
this.resultChecker = resultChecker;
118+
this.session = session;
119+
this.jdbcValueBindings = jdbcValueBindings;
120+
}
121+
122+
public void add(String tableName, PreparedStatementDetails statementDetails) {
123+
loop = loop.thenCompose( v -> performReactiveNonBatchedMutation(
124+
statementDetails,
125+
getJdbcValueBindings(),
126+
inclusionChecker,
127+
resultChecker,
128+
session
129+
) );
130+
}
131+
132+
public CompletionStage<Void> buildLoop() {
133+
return loop;
134+
}
135+
}
82136
@Override
83137
public CompletionStage<Void> performReactiveNonBatchedMutation(
84138
PreparedStatementDetails statementDetails,
@@ -99,12 +153,13 @@ public CompletionStage<Void> performReactiveNonBatchedMutation(
99153
return voidFuture();
100154
}
101155

102-
// If we get here the statement is needed - make sure it is resolved
103-
session.getJdbcServices().getSqlStatementLogger().logStatement( statementDetails.getSqlString() );
104-
valueBindings.beforeStatement( statementDetails );
156+
Object[] params = PreparedStatementAdaptor.bind( statement -> {
157+
PreparedStatementDetails details = new PrepareStatementDetailsAdaptor( statementDetails, statement, session.getJdbcServices() );
158+
valueBindings.beforeStatement( details );
159+
} );
105160

106161
return connection( session )
107-
.update( statementDetails.getSqlString() )
162+
.update( statementDetails.getSqlString(), params )
108163
.thenCompose( affectedRowCount -> checkResult( session, statementDetails, resultChecker, tableDetails, affectedRowCount ) )
109164
.whenComplete( (unused, throwable) -> {
110165
if ( statementDetails.getStatement() != null ) {

0 commit comments

Comments
 (0)