Skip to content

Commit 6fbcb4b

Browse files
committed
minor cleanups in JdbcSelectExecutorStandardImpl
1 parent aeb3b86 commit 6fbcb4b

File tree

1 file changed

+61
-43
lines changed

1 file changed

+61
-43
lines changed

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

Lines changed: 61 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
import org.hibernate.SharedSessionContract;
1313
import org.hibernate.cache.spi.QueryKey;
1414
import org.hibernate.cache.spi.QueryResultsCache;
15+
import org.hibernate.engine.spi.LoadQueryInfluencers;
1516
import org.hibernate.engine.spi.PersistenceContext;
1617
import org.hibernate.engine.spi.SessionFactoryImplementor;
1718
import org.hibernate.engine.spi.SharedSessionContractImplementor;
18-
import org.hibernate.internal.util.collections.ArrayHelper;
1919
import org.hibernate.query.TupleTransformer;
2020
import org.hibernate.query.spi.QueryOptions;
2121
import org.hibernate.sql.exec.SqlExecLogger;
@@ -28,6 +28,7 @@
2828
import org.hibernate.sql.results.internal.RowProcessingStateStandardImpl;
2929
import org.hibernate.sql.results.internal.RowTransformerStandardImpl;
3030
import org.hibernate.sql.results.internal.RowTransformerTupleTransformerAdapter;
31+
import org.hibernate.sql.results.jdbc.internal.AbstractJdbcValues;
3132
import org.hibernate.sql.results.jdbc.internal.CachedJdbcValuesMetadata;
3233
import org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess;
3334
import org.hibernate.sql.results.jdbc.internal.JdbcValuesCacheHit;
@@ -48,6 +49,7 @@
4849
import org.hibernate.type.spi.TypeConfiguration;
4950

5051
import static org.hibernate.internal.util.NullnessHelper.coalesceSuppliedValues;
52+
import static org.hibernate.internal.util.collections.ArrayHelper.indexOf;
5153

5254
/**
5355
* Standard JdbcSelectExecutor implementation used by Hibernate,
@@ -145,22 +147,7 @@ private <T, R> T doExecuteQuery(
145147
);
146148

147149
if ( rowTransformer == null ) {
148-
@SuppressWarnings("unchecked")
149-
final TupleTransformer<R> tupleTransformer = (TupleTransformer<R>) executionContext
150-
.getQueryOptions()
151-
.getTupleTransformer();
152-
153-
if ( tupleTransformer == null ) {
154-
rowTransformer = RowTransformerStandardImpl.instance();
155-
}
156-
else {
157-
final List<DomainResult<?>> domainResults = jdbcValues.getValuesMapping().getDomainResults();
158-
final String[] aliases = new String[domainResults.size()];
159-
for ( int i = 0; i < domainResults.size(); i++ ) {
160-
aliases[i] = domainResults.get( i ).getResultVariable();
161-
}
162-
rowTransformer = new RowTransformerTupleTransformerAdapter<>( aliases, tupleTransformer );
163-
}
150+
rowTransformer = getRowTransformer( executionContext, jdbcValues );
164151
}
165152

166153
final SharedSessionContractImplementor session = executionContext.getSession();
@@ -204,10 +191,8 @@ public boolean shouldReturnProxies() {
204191
}
205192
};
206193

207-
final JdbcValuesSourceProcessingStateStandardImpl valuesProcessingState = new JdbcValuesSourceProcessingStateStandardImpl(
208-
executionContext,
209-
processingOptions
210-
);
194+
final JdbcValuesSourceProcessingStateStandardImpl valuesProcessingState =
195+
new JdbcValuesSourceProcessingStateStandardImpl( executionContext, processingOptions );
211196

212197
final RowReader<R> rowReader = ResultsHelper.createRowReader(
213198
session.getFactory(),
@@ -234,7 +219,8 @@ public boolean shouldReturnProxies() {
234219

235220
if ( stats ) {
236221
final long endTime = System.nanoTime();
237-
final long milliseconds = TimeUnit.MILLISECONDS.convert( endTime - startTime, TimeUnit.NANOSECONDS );
222+
final long milliseconds =
223+
TimeUnit.MILLISECONDS.convert( endTime - startTime, TimeUnit.NANOSECONDS );
238224
statistics.queryExecuted(
239225
executionContext.getQueryIdentifier( jdbcSelect.getSqlString() ),
240226
getResultSize( result ),
@@ -245,11 +231,25 @@ public boolean shouldReturnProxies() {
245231
return result;
246232
}
247233

248-
private <T> int getResultSize(T result) {
249-
if ( result instanceof List ) {
250-
return ( (List<?>) result ).size();
234+
private static <R> RowTransformer<R> getRowTransformer(ExecutionContext executionContext, JdbcValues jdbcValues) {
235+
@SuppressWarnings("unchecked")
236+
final TupleTransformer<R> tupleTransformer =
237+
(TupleTransformer<R>) executionContext.getQueryOptions().getTupleTransformer();
238+
if ( tupleTransformer == null ) {
239+
return RowTransformerStandardImpl.instance();
240+
}
241+
else {
242+
final List<DomainResult<?>> domainResults = jdbcValues.getValuesMapping().getDomainResults();
243+
final String[] aliases = new String[domainResults.size()];
244+
for ( int i = 0; i < domainResults.size(); i++ ) {
245+
aliases[i] = domainResults.get( i ).getResultVariable();
246+
}
247+
return new RowTransformerTupleTransformerAdapter<>( aliases, tupleTransformer );
251248
}
252-
return -1;
249+
}
250+
251+
private <T> int getResultSize(T result) {
252+
return result instanceof List<?> list ? list.size() : -1;
253253
}
254254

255255
private JdbcValues resolveJdbcValuesSource(
@@ -334,20 +334,41 @@ private JdbcValues resolveJdbcValuesSource(
334334
}
335335
}
336336

337+
return resolveJdbcValues(
338+
queryIdentifier,
339+
executionContext,
340+
resultSetAccess,
341+
cachedResults,
342+
queryResultsCacheKey,
343+
mappingProducer,
344+
session,
345+
factory
346+
);
347+
}
348+
349+
private static AbstractJdbcValues resolveJdbcValues(
350+
String queryIdentifier,
351+
ExecutionContext executionContext,
352+
DeferredResultSetAccess resultSetAccess,
353+
List<?> cachedResults,
354+
QueryKey queryResultsCacheKey,
355+
JdbcValuesMappingProducer mappingProducer,
356+
SharedSessionContractImplementor session,
357+
SessionFactoryImplementor factory) {
358+
final LoadQueryInfluencers loadQueryInfluencers = session.getLoadQueryInfluencers();
337359
if ( cachedResults == null ) {
338360
final CachedJdbcValuesMetadata metadataForCache;
339361
final JdbcValuesMapping jdbcValuesMapping;
340362
if ( queryResultsCacheKey == null ) {
341-
jdbcValuesMapping = mappingProducer.resolve( resultSetAccess, session.getLoadQueryInfluencers(), factory );
363+
jdbcValuesMapping = mappingProducer.resolve( resultSetAccess, loadQueryInfluencers, factory );
342364
metadataForCache = null;
343365
}
344366
else {
345367
// If we need to put the values into the cache, we need to be able to capture the JdbcValuesMetadata
346368
final CapturingJdbcValuesMetadata capturingMetadata = new CapturingJdbcValuesMetadata( resultSetAccess );
347-
jdbcValuesMapping = mappingProducer.resolve( capturingMetadata, session.getLoadQueryInfluencers(), factory );
369+
jdbcValuesMapping = mappingProducer.resolve( capturingMetadata, loadQueryInfluencers, factory );
348370
metadataForCache = capturingMetadata.resolveMetadataForCache();
349371
}
350-
351372
return new JdbcValuesResultSetImpl(
352373
resultSetAccess,
353374
queryResultsCacheKey,
@@ -360,14 +381,13 @@ private JdbcValues resolveJdbcValuesSource(
360381
);
361382
}
362383
else {
363-
final JdbcValuesMapping jdbcValuesMapping;
364-
if ( cachedResults.isEmpty() || !( cachedResults.get( 0 ) instanceof JdbcValuesMetadata ) ) {
365-
jdbcValuesMapping = mappingProducer.resolve( resultSetAccess, session.getLoadQueryInfluencers(), factory );
366-
}
367-
else {
368-
jdbcValuesMapping = mappingProducer.resolve( (JdbcValuesMetadata) cachedResults.get( 0 ), session.getLoadQueryInfluencers(), factory );
369-
}
370-
return new JdbcValuesCacheHit( cachedResults, jdbcValuesMapping );
384+
final JdbcValuesMetadata valuesMetadata =
385+
!cachedResults.isEmpty()
386+
&& cachedResults.get( 0 ) instanceof JdbcValuesMetadata jdbcValuesMetadata
387+
? jdbcValuesMetadata
388+
: resultSetAccess;
389+
return new JdbcValuesCacheHit( cachedResults,
390+
mappingProducer.resolve( valuesMetadata, loadQueryInfluencers, factory ) );
371391
}
372392
}
373393

@@ -414,7 +434,7 @@ public int resolveColumnPosition(String columnName) {
414434
position = resultSetAccess.resolveColumnPosition( columnName );
415435
columnNames[position - 1] = columnName;
416436
}
417-
else if ( ( position = ArrayHelper.indexOf( columnNames, columnName ) + 1 ) == 0 ) {
437+
else if ( ( position = indexOf( columnNames, columnName ) + 1 ) == 0 ) {
418438
position = resultSetAccess.resolveColumnPosition( columnName );
419439
columnNames[position - 1] = columnName;
420440
}
@@ -446,16 +466,14 @@ public <J> BasicType<J> resolveType(
446466
if ( columnNames == null ) {
447467
initializeArrays();
448468
}
449-
final BasicType<J> basicType = resultSetAccess.resolveType( position, explicitJavaType, typeConfiguration );
469+
final BasicType<J> basicType =
470+
resultSetAccess.resolveType( position, explicitJavaType, typeConfiguration );
450471
types[position - 1] = basicType;
451472
return basicType;
452473
}
453474

454475
public CachedJdbcValuesMetadata resolveMetadataForCache() {
455-
if ( columnNames == null ) {
456-
return null;
457-
}
458-
return new CachedJdbcValuesMetadata( columnNames, types );
476+
return columnNames == null ? null : new CachedJdbcValuesMetadata( columnNames, types );
459477
}
460478
}
461479

0 commit comments

Comments
 (0)