Skip to content

Commit aea9239

Browse files
committed
cleanups to StandardReactiveSelectExecutor
1 parent 8b57492 commit aea9239

File tree

1 file changed

+50
-62
lines changed

1 file changed

+50
-62
lines changed

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

Lines changed: 50 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
import org.hibernate.SharedSessionContract;
1616
import org.hibernate.cache.spi.QueryKey;
1717
import org.hibernate.cache.spi.QueryResultsCache;
18+
import org.hibernate.engine.spi.LoadQueryInfluencers;
1819
import org.hibernate.engine.spi.PersistenceContext;
1920
import org.hibernate.engine.spi.SessionFactoryImplementor;
2021
import org.hibernate.engine.spi.SharedSessionContractImplementor;
21-
import org.hibernate.internal.util.collections.ArrayHelper;
2222
import org.hibernate.query.TupleTransformer;
2323
import org.hibernate.engine.internal.ReactivePersistenceContextAdapter;
2424
import org.hibernate.query.spi.QueryOptions;
@@ -43,6 +43,7 @@
4343
import org.hibernate.sql.results.internal.RowTransformerTupleTransformerAdapter;
4444
import org.hibernate.sql.results.jdbc.internal.CachedJdbcValuesMetadata;
4545
import org.hibernate.sql.results.jdbc.internal.JdbcValuesSourceProcessingStateStandardImpl;
46+
import org.hibernate.sql.results.jdbc.spi.JdbcValuesMapping;
4647
import org.hibernate.sql.results.jdbc.spi.JdbcValuesMetadata;
4748
import org.hibernate.sql.results.jdbc.spi.JdbcValuesSourceProcessingOptions;
4849
import org.hibernate.sql.results.spi.RowTransformer;
@@ -52,6 +53,7 @@
5253
import org.hibernate.type.spi.TypeConfiguration;
5354

5455
import static org.hibernate.internal.util.NullnessHelper.coalesceSuppliedValues;
56+
import static org.hibernate.internal.util.collections.ArrayHelper.indexOf;
5557

5658
/**
5759
* @see org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl
@@ -148,8 +150,8 @@ public <T, R> CompletionStage<T> executeQuery(
148150
ReactiveResultsConsumer<T, R> resultsConsumer) {
149151

150152
final PersistenceContext persistenceContext = executionContext.getSession().getPersistenceContext();
151-
boolean defaultReadOnlyOrig = persistenceContext.isDefaultReadOnly();
152-
Boolean readOnly = executionContext.getQueryOptions().isReadOnly();
153+
final boolean defaultReadOnlyOrig = persistenceContext.isDefaultReadOnly();
154+
final Boolean readOnly = executionContext.getQueryOptions().isReadOnly();
153155
if ( readOnly != null ) {
154156
// The read-only/modifiable mode for the query was explicitly set.
155157
// Temporarily set the default read-only/modifiable setting to the query's setting.
@@ -179,7 +181,8 @@ private <T, R> CompletionStage<T> doExecuteQuery(
179181
JdbcSelectExecutor.StatementCreator statementCreator,
180182
ReactiveResultsConsumer<T, R> resultsConsumer) {
181183

182-
final ReactiveDeferredResultSetAccess deferredResultSetAccess = new ReactiveDeferredResultSetAccess( jdbcSelect, jdbcParameterBindings, executionContext, statementCreator, resultCountEstimate );
184+
final ReactiveDeferredResultSetAccess deferredResultSetAccess =
185+
new ReactiveDeferredResultSetAccess( jdbcSelect, jdbcParameterBindings, executionContext, statementCreator, resultCountEstimate );
183186

184187
return resolveJdbcValuesSource(
185188
executionContext.getQueryIdentifier( deferredResultSetAccess.getFinalSql() ),
@@ -216,10 +219,8 @@ public boolean shouldReturnProxies() {
216219
}
217220
};
218221

219-
final JdbcValuesSourceProcessingStateStandardImpl valuesProcessingState = new JdbcValuesSourceProcessingStateStandardImpl(
220-
executionContext,
221-
processingOptions
222-
);
222+
final JdbcValuesSourceProcessingStateStandardImpl valuesProcessingState =
223+
new JdbcValuesSourceProcessingStateStandardImpl( executionContext, processingOptions );
223224

224225
final ReactiveRowReader<R> rowReader = ReactiveResultsHelper.createRowReader(
225226
executionContext.getSession().getSessionFactory(),
@@ -257,26 +258,25 @@ private static <R> RowTransformer<R> rowTransformer(
257258
ExecutionContext executionContext,
258259
RowTransformer<R> transformer,
259260
ReactiveValuesResultSet jdbcValues) {
260-
RowTransformer<R> rowTransformer = transformer;
261-
if ( rowTransformer == null ) {
262-
@SuppressWarnings("unchecked") final TupleTransformer<R> tupleTransformer = (TupleTransformer<R>) executionContext
263-
.getQueryOptions()
264-
.getTupleTransformer();
265-
261+
if ( transformer == null ) {
262+
@SuppressWarnings("unchecked")
263+
final TupleTransformer<R> tupleTransformer =
264+
(TupleTransformer<R>) executionContext.getQueryOptions().getTupleTransformer();
266265
if ( tupleTransformer == null ) {
267-
rowTransformer = RowTransformerStandardImpl.instance();
266+
return RowTransformerStandardImpl.instance();
268267
}
269268
else {
270-
final List<DomainResult<?>> domainResults = jdbcValues.getValuesMapping()
271-
.getDomainResults();
269+
final List<DomainResult<?>> domainResults = jdbcValues.getValuesMapping().getDomainResults();
272270
final String[] aliases = new String[domainResults.size()];
273271
for ( int i = 0; i < domainResults.size(); i++ ) {
274272
aliases[i] = domainResults.get( i ).getResultVariable();
275273
}
276-
rowTransformer = new RowTransformerTupleTransformerAdapter<>( aliases, tupleTransformer );
274+
return new RowTransformerTupleTransformerAdapter<>( aliases, tupleTransformer );
277275
}
278276
}
279-
return rowTransformer;
277+
else {
278+
return transformer;
279+
}
280280
}
281281

282282
public CompletionStage<ReactiveValuesResultSet> resolveJdbcValuesSource(
@@ -290,9 +290,10 @@ public CompletionStage<ReactiveValuesResultSet> resolveJdbcValuesSource(
290290
final boolean queryCacheEnabled = factory.getSessionFactoryOptions().isQueryCacheEnabled();
291291

292292
final CacheMode cacheMode = resolveCacheMode( executionContext );
293+
final QueryOptions queryOptions = executionContext.getQueryOptions();
293294
final boolean cacheable = queryCacheEnabled
294295
&& canBeCached
295-
&& executionContext.getQueryOptions().isResultCachingEnabled() == Boolean.TRUE;
296+
&& queryOptions.isResultCachingEnabled() == Boolean.TRUE;
296297

297298
final QueryKey queryResultsCacheKey;
298299
final List<?> cachedResults;
@@ -307,10 +308,10 @@ public CompletionStage<ReactiveValuesResultSet> resolveJdbcValuesSource(
307308
}
308309

309310
final QueryResultsCache queryCache = factory.getCache()
310-
.getQueryResultsCache( executionContext.getQueryOptions().getResultCacheRegionName() );
311+
.getQueryResultsCache( queryOptions.getResultCacheRegionName() );
311312

312313
queryResultsCacheKey = QueryKey
313-
.from( jdbcSelect.getSqlString(), executionContext.getQueryOptions().getLimit(), executionContext.getQueryParameterBindings(), session );
314+
.from( jdbcSelect.getSqlString(), queryOptions.getLimit(), executionContext.getQueryParameterBindings(), session );
314315

315316
cachedResults = queryCache.get(
316317
// todo (6.0) : QueryCache#get takes the `queryResultsCacheKey` see tat discussion above
@@ -345,7 +346,7 @@ public CompletionStage<ReactiveValuesResultSet> resolveJdbcValuesSource(
345346
if ( cacheable && cacheMode.isPutEnabled() ) {
346347
queryResultsCacheKey = QueryKey.from(
347348
jdbcSelect.getSqlString(),
348-
executionContext.getQueryOptions().getLimit(),
349+
queryOptions.getLimit(),
349350
executionContext.getQueryParameterBindings(),
350351
session
351352
);
@@ -355,16 +356,18 @@ public CompletionStage<ReactiveValuesResultSet> resolveJdbcValuesSource(
355356
}
356357
}
357358

358-
ReactiveValuesMappingProducer mappingProducer = (ReactiveValuesMappingProducer) jdbcSelect.getJdbcValuesMappingProducer();
359+
final LoadQueryInfluencers loadQueryInfluencers = session.getLoadQueryInfluencers();
360+
361+
final ReactiveValuesMappingProducer mappingProducer =
362+
(ReactiveValuesMappingProducer) jdbcSelect.getJdbcValuesMappingProducer();
359363
if ( cachedResults == null ) {
360364
if ( queryResultsCacheKey == null ) {
361-
return mappingProducer
362-
.reactiveResolve( resultSetAccess, session.getLoadQueryInfluencers(), factory )
365+
return mappingProducer.reactiveResolve( resultSetAccess, loadQueryInfluencers, factory )
363366
.thenApply( jdbcValuesMapping -> new ReactiveValuesResultSet(
364367
resultSetAccess,
365368
null,
366369
queryIdentifier,
367-
executionContext.getQueryOptions(),
370+
queryOptions,
368371
resultSetAccess.usesFollowOnLocking(),
369372
jdbcValuesMapping,
370373
null,
@@ -374,13 +377,12 @@ public CompletionStage<ReactiveValuesResultSet> resolveJdbcValuesSource(
374377
else {
375378
// If we need to put the values into the cache, we need to be able to capture the JdbcValuesMetadata
376379
final CapturingJdbcValuesMetadata capturingMetadata = new CapturingJdbcValuesMetadata( resultSetAccess );
377-
return mappingProducer
378-
.reactiveResolve( resultSetAccess, session.getLoadQueryInfluencers(), factory )
380+
return mappingProducer.reactiveResolve( resultSetAccess, loadQueryInfluencers, factory )
379381
.thenApply( jdbcValuesMapping -> new ReactiveValuesResultSet(
380382
resultSetAccess,
381383
queryResultsCacheKey,
382384
queryIdentifier,
383-
executionContext.getQueryOptions(),
385+
queryOptions,
384386
resultSetAccess.usesFollowOnLocking(),
385387
jdbcValuesMapping,
386388
capturingMetadata.resolveMetadataForCache(),
@@ -392,34 +394,22 @@ public CompletionStage<ReactiveValuesResultSet> resolveJdbcValuesSource(
392394
// TODO: Implements JdbcValuesCacheHit for reactive, see JdbcSelectExecutorStandardImpl#resolveJdbcValuesSource
393395
// If we need to put the values into the cache, we need to be able to capture the JdbcValuesMetadata
394396
final CapturingJdbcValuesMetadata capturingMetadata = new CapturingJdbcValuesMetadata( resultSetAccess );
395-
if ( cachedResults.isEmpty() || !( cachedResults.get( 0 ) instanceof JdbcValuesMetadata ) ) {
396-
return mappingProducer.reactiveResolve( resultSetAccess, session.getLoadQueryInfluencers(), factory )
397-
.thenApply( jdbcValuesMapping -> new ReactiveValuesResultSet(
398-
resultSetAccess,
399-
queryResultsCacheKey,
400-
queryIdentifier,
401-
executionContext.getQueryOptions(),
402-
resultSetAccess.usesFollowOnLocking(),
403-
jdbcValuesMapping,
404-
capturingMetadata.resolveMetadataForCache(),
405-
executionContext
406-
) );
407-
}
408-
else {
409-
return mappingProducer
410-
.reactiveResolve( (JdbcValuesMetadata) cachedResults.get( 0 ), session.getLoadQueryInfluencers(), factory )
411-
.thenApply( jdbcValuesMapping -> new ReactiveValuesResultSet(
412-
resultSetAccess,
413-
queryResultsCacheKey,
414-
queryIdentifier,
415-
executionContext.getQueryOptions(),
416-
resultSetAccess.usesFollowOnLocking(),
417-
jdbcValuesMapping,
418-
capturingMetadata.resolveMetadataForCache(),
419-
executionContext
420-
) );
421-
}
422-
}
397+
final CompletionStage<JdbcValuesMapping> stage =
398+
!cachedResults.isEmpty()
399+
&& cachedResults.get(0) instanceof JdbcValuesMetadata jdbcValuesMetadata
400+
? mappingProducer.reactiveResolve( jdbcValuesMetadata, loadQueryInfluencers, factory )
401+
: mappingProducer.reactiveResolve( resultSetAccess, loadQueryInfluencers, factory );
402+
return stage.thenApply( jdbcValuesMapping -> new ReactiveValuesResultSet(
403+
resultSetAccess,
404+
queryResultsCacheKey,
405+
queryIdentifier,
406+
queryOptions,
407+
resultSetAccess.usesFollowOnLocking(),
408+
jdbcValuesMapping,
409+
capturingMetadata.resolveMetadataForCache(),
410+
executionContext
411+
) );
412+
}
423413
}
424414

425415
private static CacheMode resolveCacheMode(ExecutionContext executionContext) {
@@ -468,7 +458,7 @@ public int resolveColumnPosition(String columnName) {
468458
position = resultSetAccess.resolveColumnPosition( columnName );
469459
columnNames[position - 1] = columnName;
470460
}
471-
else if ( ( position = ArrayHelper.indexOf( columnNames, columnName ) + 1 ) == 0 ) {
461+
else if ( ( position = indexOf( columnNames, columnName ) + 1 ) == 0 ) {
472462
position = resultSetAccess.resolveColumnPosition( columnName );
473463
columnNames[position - 1] = columnName;
474464
}
@@ -556,9 +546,7 @@ public <T> void end(JdbcOperationQuerySelect jdbcSelect, T result) {
556546
}
557547

558548
private <T> int getResultSize(T result) {
559-
return result instanceof Collection
560-
? ( (Collection<?>) result ).size()
561-
: -1;
549+
return result instanceof Collection<?> collection ? collection.size() : -1;
562550
}
563551
}
564552
}

0 commit comments

Comments
 (0)