Skip to content

Commit 0dd9f54

Browse files
committed
fix
1 parent 0b735f1 commit 0dd9f54

File tree

2 files changed

+64
-6
lines changed

2 files changed

+64
-6
lines changed

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

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,22 @@
3333
import org.hibernate.query.QueryParameter;
3434
import org.hibernate.query.ResultListTransformer;
3535
import org.hibernate.query.TupleTransformer;
36+
import org.hibernate.query.internal.DelegatingDomainQueryExecutionContext;
3637
import org.hibernate.query.named.NamedResultSetMappingMemento;
3738
import org.hibernate.query.spi.AbstractSelectionQuery;
3839
import org.hibernate.query.spi.NonSelectQueryPlan;
3940
import org.hibernate.query.spi.QueryInterpretationCache;
41+
import org.hibernate.query.spi.QueryOptions;
4042
import org.hibernate.query.sql.internal.NativeQueryImpl;
4143
import org.hibernate.query.sql.spi.NamedNativeQueryMemento;
42-
import org.hibernate.query.sql.spi.NativeSelectQueryPlan;
4344
import org.hibernate.reactive.logging.impl.Log;
4445
import org.hibernate.reactive.logging.impl.LoggerFactory;
4546
import org.hibernate.reactive.query.spi.ReactiveAbstractSelectionQuery;
47+
import org.hibernate.reactive.query.spi.ReactiveNativeSelectQueryPlan;
4648
import org.hibernate.reactive.query.sql.spi.ReactiveNativeQueryImplementor;
4749
import org.hibernate.reactive.query.sql.spi.ReactiveNonSelectQueryPlan;
4850
import org.hibernate.reactive.query.sqm.spi.ReactiveSelectQueryPlan;
51+
import org.hibernate.reactive.sql.results.spi.ReactiveSingleResultConsumer;
4952
import org.hibernate.type.BasicTypeReference;
5053

5154
import jakarta.persistence.AttributeConverter;
@@ -190,14 +193,19 @@ public List<R> list() {
190193

191194
@Override
192195
public CompletionStage<Long> getReactiveResultsCount() {
193-
NativeSelectQueryPlan<Long> countQueryPlan = createCountQueryPlan();
194-
return selectionQueryDelegate
195-
.getReactiveResultsCount(null, this );
196+
final DelegatingDomainQueryExecutionContext context = new DelegatingDomainQueryExecutionContext( this ) {
197+
@Override
198+
public QueryOptions getQueryOptions() {
199+
return QueryOptions.NONE;
200+
}
201+
};
202+
203+
return createCountQueryPlan().reactiveExecuteQuery( context, new ReactiveSingleResultConsumer<>() );
196204
}
197205

198206
@Override
199-
protected NativeSelectQueryPlan<Long> createCountQueryPlan() {
200-
return super.createCountQueryPlan();
207+
protected ReactiveNativeSelectQueryPlan<Long> createCountQueryPlan() {
208+
return (ReactiveNativeSelectQueryPlan<Long>) super.createCountQueryPlan();
201209
}
202210

203211
@Override

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

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.hibernate.reactive.query.spi.ReactiveNativeSelectQueryPlan;
2828
import org.hibernate.reactive.sql.exec.internal.StandardReactiveSelectExecutor;
2929
import org.hibernate.reactive.sql.results.spi.ReactiveListResultsConsumer;
30+
import org.hibernate.reactive.sql.results.spi.ReactiveResultsConsumer;
3031
import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl;
3132
import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect;
3233
import org.hibernate.sql.exec.spi.JdbcParameterBinder;
@@ -65,6 +66,55 @@ public ReactiveNativeSelectQueryPlanImpl(
6566

6667
}
6768

69+
@Override
70+
public <T> CompletionStage<T> reactiveExecuteQuery(DomainQueryExecutionContext executionContext, ReactiveResultsConsumer<T, R> resultsConsumer) {
71+
final List<JdbcParameterBinder> jdbcParameterBinders;
72+
final JdbcParameterBindings jdbcParameterBindings;
73+
74+
final QueryParameterBindings queryParameterBindings = executionContext.getQueryParameterBindings();
75+
if ( parameterList == null || parameterList.isEmpty() ) {
76+
jdbcParameterBinders = emptyList();
77+
jdbcParameterBindings = JdbcParameterBindings.NO_BINDINGS;
78+
}
79+
else {
80+
jdbcParameterBinders = new ArrayList<>( parameterList.size() );
81+
jdbcParameterBindings = new JdbcParameterBindingsImpl(
82+
queryParameterBindings,
83+
parameterList,
84+
jdbcParameterBinders,
85+
executionContext.getSession().getFactory()
86+
);
87+
}
88+
89+
final ReactiveSharedSessionContractImplementor reactiveSession = (ReactiveSharedSessionContractImplementor) executionContext.getSession();
90+
return reactiveSession
91+
.reactiveAutoFlushIfRequired( affectedTableNames )
92+
.thenCompose( aBoolean -> {
93+
final JdbcOperationQuerySelect jdbcSelect = new JdbcOperationQuerySelect(
94+
sql,
95+
jdbcParameterBinders,
96+
resultSetMapping,
97+
affectedTableNames,
98+
Collections.emptySet()
99+
);
100+
101+
return StandardReactiveSelectExecutor.INSTANCE
102+
.executeQuery(
103+
jdbcSelect,
104+
jdbcParameterBindings,
105+
SqmJdbcExecutionContextAdapter.usingLockingAndPaging( executionContext ),
106+
null,
107+
null,
108+
sqlString -> executionContext.getSession()
109+
.getJdbcCoordinator()
110+
.getStatementPreparer()
111+
.prepareQueryStatement( sqlString, false, null ),
112+
resultsConsumer
113+
);
114+
115+
} );
116+
}
117+
68118
@Override
69119
public CompletionStage<List<R>> reactivePerformList(DomainQueryExecutionContext executionContext) {
70120
final QueryOptions queryOptions = executionContext.getQueryOptions();

0 commit comments

Comments
 (0)