12
12
import java .util .concurrent .TimeUnit ;
13
13
14
14
import org .hibernate .CacheMode ;
15
+ import org .hibernate .SharedSessionContract ;
15
16
import org .hibernate .cache .spi .QueryKey ;
16
17
import org .hibernate .cache .spi .QueryResultsCache ;
18
+ import org .hibernate .engine .internal .ReactivePersistenceContextAdapter ;
17
19
import org .hibernate .engine .spi .PersistenceContext ;
18
20
import org .hibernate .engine .spi .SessionFactoryImplementor ;
19
21
import org .hibernate .engine .spi .SharedSessionContractImplementor ;
20
22
import org .hibernate .internal .util .collections .ArrayHelper ;
21
23
import org .hibernate .query .TupleTransformer ;
22
- import org .hibernate .engine . internal . ReactivePersistenceContextAdapter ;
24
+ import org .hibernate .query . spi . QueryOptions ;
23
25
import org .hibernate .reactive .sql .exec .spi .ReactiveRowProcessingState ;
24
26
import org .hibernate .reactive .sql .exec .spi .ReactiveSelectExecutor ;
25
27
import org .hibernate .reactive .sql .exec .spi .ReactiveValuesResultSet ;
31
33
import org .hibernate .reactive .sql .results .spi .ReactiveRowReader ;
32
34
import org .hibernate .reactive .sql .results .spi .ReactiveValuesMappingProducer ;
33
35
import org .hibernate .sql .exec .SqlExecLogger ;
34
- import org .hibernate .sql .exec .internal .JdbcExecHelper ;
35
36
import org .hibernate .sql .exec .internal .StandardStatementCreator ;
36
37
import org .hibernate .sql .exec .spi .ExecutionContext ;
37
38
import org .hibernate .sql .exec .spi .JdbcOperationQuerySelect ;
50
51
import org .hibernate .type .descriptor .java .JavaType ;
51
52
import org .hibernate .type .spi .TypeConfiguration ;
52
53
54
+ import static org .hibernate .internal .util .NullnessHelper .coalesceSuppliedValues ;
55
+
53
56
/**
54
57
* @see org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl
55
58
*/
@@ -254,26 +257,26 @@ private static <R> RowTransformer<R> rowTransformer(
254
257
ExecutionContext executionContext ,
255
258
RowTransformer <R > transformer ,
256
259
ReactiveValuesResultSet jdbcValues ) {
257
- RowTransformer <R > rowTransformer = transformer ;
258
- if ( rowTransformer == null ) {
259
- @ SuppressWarnings ("unchecked" ) final TupleTransformer <R > tupleTransformer = (TupleTransformer <R >) executionContext
260
- .getQueryOptions ()
261
- .getTupleTransformer ();
262
-
263
- if ( tupleTransformer == null ) {
264
- rowTransformer = RowTransformerStandardImpl .instance ();
265
- }
266
- else {
267
- final List <DomainResult <?>> domainResults = jdbcValues .getValuesMapping ()
268
- .getDomainResults ();
269
- final String [] aliases = new String [domainResults .size ()];
270
- for ( int i = 0 ; i < domainResults .size (); i ++ ) {
271
- aliases [i ] = domainResults .get ( i ).getResultVariable ();
272
- }
273
- rowTransformer = new RowTransformerTupleTransformerAdapter <>( aliases , tupleTransformer );
274
- }
260
+ if ( transformer != null ) {
261
+ return transformer ;
262
+ }
263
+
264
+ @ SuppressWarnings ("unchecked" )
265
+ final TupleTransformer <R > tupleTransformer = (TupleTransformer <R >) executionContext
266
+ .getQueryOptions ()
267
+ .getTupleTransformer ();
268
+
269
+ if ( tupleTransformer == null ) {
270
+ return RowTransformerStandardImpl .instance ();
275
271
}
276
- return rowTransformer ;
272
+
273
+ final List <DomainResult <?>> domainResults = jdbcValues
274
+ .getValuesMapping ().getDomainResults ();
275
+ final String [] aliases = new String [domainResults .size ()];
276
+ for ( int i = 0 ; i < domainResults .size (); i ++ ) {
277
+ aliases [i ] = domainResults .get ( i ).getResultVariable ();
278
+ }
279
+ return new RowTransformerTupleTransformerAdapter <>( aliases , tupleTransformer );
277
280
}
278
281
279
282
public CompletionStage <ReactiveValuesResultSet > resolveJdbcValuesSource (
@@ -286,13 +289,13 @@ public CompletionStage<ReactiveValuesResultSet> resolveJdbcValuesSource(
286
289
final SessionFactoryImplementor factory = session .getFactory ();
287
290
final boolean queryCacheEnabled = factory .getSessionFactoryOptions ().isQueryCacheEnabled ();
288
291
289
- final List <?> cachedResults ;
290
- final CacheMode cacheMode = JdbcExecHelper .resolveCacheMode ( executionContext );
292
+ final CacheMode cacheMode = resolveCacheMode ( executionContext );
291
293
final boolean cacheable = queryCacheEnabled
292
294
&& canBeCached
293
295
&& executionContext .getQueryOptions ().isResultCachingEnabled () == Boolean .TRUE ;
294
296
final QueryKey queryResultsCacheKey ;
295
297
298
+ final List <?> cachedResults ;
296
299
if ( cacheable && cacheMode .isGetEnabled () ) {
297
300
SqlExecLogger .SQL_EXEC_LOGGER .debugf ( "Reading Query result cache data per CacheMode#isGetEnabled [%s]" , cacheMode .name () );
298
301
final Set <String > querySpaces = jdbcSelect .getAffectedTableNames ();
@@ -419,6 +422,20 @@ public CompletionStage<ReactiveValuesResultSet> resolveJdbcValuesSource(
419
422
}
420
423
}
421
424
425
+
426
+ /**
427
+ * Copied from Hibernate ORM
428
+ */
429
+ private static CacheMode resolveCacheMode (ExecutionContext executionContext ) {
430
+ final QueryOptions queryOptions = executionContext .getQueryOptions ();
431
+ final SharedSessionContract session = executionContext .getSession ();
432
+ return coalesceSuppliedValues (
433
+ () -> queryOptions == null ? null : queryOptions .getCacheMode (),
434
+ session ::getCacheMode ,
435
+ () -> CacheMode .NORMAL
436
+ );
437
+ }
438
+
422
439
/**
423
440
* see {@link CachedJdbcValuesMetadata}
424
441
*/
0 commit comments