1212import java .util .concurrent .TimeUnit ;
1313
1414import org .hibernate .CacheMode ;
15+ import org .hibernate .SharedSessionContract ;
1516import org .hibernate .cache .spi .QueryKey ;
1617import org .hibernate .cache .spi .QueryResultsCache ;
18+ import org .hibernate .engine .internal .ReactivePersistenceContextAdapter ;
1719import org .hibernate .engine .spi .PersistenceContext ;
1820import org .hibernate .engine .spi .SessionFactoryImplementor ;
1921import org .hibernate .engine .spi .SharedSessionContractImplementor ;
2022import org .hibernate .internal .util .collections .ArrayHelper ;
2123import org .hibernate .query .TupleTransformer ;
22- import org .hibernate .engine . internal . ReactivePersistenceContextAdapter ;
24+ import org .hibernate .query . spi . QueryOptions ;
2325import org .hibernate .reactive .sql .exec .spi .ReactiveRowProcessingState ;
2426import org .hibernate .reactive .sql .exec .spi .ReactiveSelectExecutor ;
2527import org .hibernate .reactive .sql .exec .spi .ReactiveValuesResultSet ;
3133import org .hibernate .reactive .sql .results .spi .ReactiveRowReader ;
3234import org .hibernate .reactive .sql .results .spi .ReactiveValuesMappingProducer ;
3335import org .hibernate .sql .exec .SqlExecLogger ;
34- import org .hibernate .sql .exec .internal .JdbcExecHelper ;
3536import org .hibernate .sql .exec .internal .StandardStatementCreator ;
3637import org .hibernate .sql .exec .spi .ExecutionContext ;
3738import org .hibernate .sql .exec .spi .JdbcOperationQuerySelect ;
5051import org .hibernate .type .descriptor .java .JavaType ;
5152import org .hibernate .type .spi .TypeConfiguration ;
5253
54+ import static org .hibernate .internal .util .NullnessHelper .coalesceSuppliedValues ;
55+
5356/**
5457 * @see org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl
5558 */
@@ -254,26 +257,26 @@ private static <R> RowTransformer<R> rowTransformer(
254257 ExecutionContext executionContext ,
255258 RowTransformer <R > transformer ,
256259 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 ();
275271 }
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 );
277280 }
278281
279282 public CompletionStage <ReactiveValuesResultSet > resolveJdbcValuesSource (
@@ -286,13 +289,13 @@ public CompletionStage<ReactiveValuesResultSet> resolveJdbcValuesSource(
286289 final SessionFactoryImplementor factory = session .getFactory ();
287290 final boolean queryCacheEnabled = factory .getSessionFactoryOptions ().isQueryCacheEnabled ();
288291
289- final List <?> cachedResults ;
290- final CacheMode cacheMode = JdbcExecHelper .resolveCacheMode ( executionContext );
292+ final CacheMode cacheMode = resolveCacheMode ( executionContext );
291293 final boolean cacheable = queryCacheEnabled
292294 && canBeCached
293295 && executionContext .getQueryOptions ().isResultCachingEnabled () == Boolean .TRUE ;
294296 final QueryKey queryResultsCacheKey ;
295297
298+ final List <?> cachedResults ;
296299 if ( cacheable && cacheMode .isGetEnabled () ) {
297300 SqlExecLogger .SQL_EXEC_LOGGER .debugf ( "Reading Query result cache data per CacheMode#isGetEnabled [%s]" , cacheMode .name () );
298301 final Set <String > querySpaces = jdbcSelect .getAffectedTableNames ();
@@ -419,6 +422,20 @@ public CompletionStage<ReactiveValuesResultSet> resolveJdbcValuesSource(
419422 }
420423 }
421424
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+
422439 /**
423440 * see {@link CachedJdbcValuesMetadata}
424441 */
0 commit comments