Skip to content

Commit 691ca22

Browse files
committed
HHH-19560 Remove TupleTransformer and ResultListTransformer from interpretation caching
1 parent 80ee837 commit 691ca22

File tree

5 files changed

+38
-37
lines changed

5 files changed

+38
-37
lines changed

hibernate-core/src/main/java/org/hibernate/dialect/function/SqlFunction.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,22 @@
77
package org.hibernate.dialect.function;
88

99
import java.util.List;
10+
import java.util.function.Supplier;
1011

12+
import org.checkerframework.checker.nullness.qual.Nullable;
13+
import org.hibernate.metamodel.mapping.BasicValuedMapping;
1114
import org.hibernate.query.ReturnableType;
1215
import org.hibernate.query.sqm.function.AbstractSqmSelfRenderingFunctionDescriptor;
16+
import org.hibernate.query.sqm.produce.function.FunctionReturnTypeResolver;
1317
import org.hibernate.query.sqm.produce.function.StandardArgumentsValidators;
14-
import org.hibernate.query.sqm.produce.function.StandardFunctionReturnTypeResolvers;
18+
import org.hibernate.query.sqm.sql.SqmToSqlAstConverter;
19+
import org.hibernate.query.sqm.tree.SqmTypedNode;
1520
import org.hibernate.sql.ast.SqlAstTranslator;
1621
import org.hibernate.sql.ast.spi.SqlAppender;
1722
import org.hibernate.sql.ast.tree.SqlAstNode;
1823
import org.hibernate.sql.ast.tree.expression.QueryLiteral;
1924
import org.hibernate.type.JavaObjectType;
25+
import org.hibernate.type.spi.TypeConfiguration;
2026

2127
/**
2228
* A function to pass through a SQL fragment.
@@ -30,7 +36,24 @@ public SqlFunction() {
3036
super(
3137
"sql",
3238
StandardArgumentsValidators.min( 1 ),
33-
StandardFunctionReturnTypeResolvers.invariant( JavaObjectType.INSTANCE ),
39+
new FunctionReturnTypeResolver() {
40+
@Override
41+
public ReturnableType<?> resolveFunctionReturnType(
42+
ReturnableType<?> impliedType,
43+
@Nullable SqmToSqlAstConverter converter,
44+
List<? extends SqmTypedNode<?>> arguments,
45+
TypeConfiguration typeConfiguration) {
46+
return impliedType != null
47+
? impliedType
48+
: typeConfiguration.getBasicTypeForJavaType( Object.class );
49+
}
50+
51+
@Override
52+
public BasicValuedMapping resolveFunctionReturnType(Supplier<BasicValuedMapping> impliedTypeAccess, List<? extends SqlAstNode> arguments) {
53+
final BasicValuedMapping impliedType = impliedTypeAccess.get();
54+
return impliedType != null ? impliedType : JavaObjectType.INSTANCE;
55+
}
56+
},
3457
null
3558
);
3659
}

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -950,9 +950,7 @@ private SelectInterpretationsKey selectInterpretationsKey(ResultSetMapping resul
950950
return new SelectInterpretationsKey(
951951
getQueryString(),
952952
resultSetMapping,
953-
getSynchronizedQuerySpaces(),
954-
getQueryOptions().getTupleTransformer(),
955-
getQueryOptions().getResultListTransformer()
953+
getSynchronizedQuerySpaces()
956954
);
957955
}
958956

hibernate-core/src/main/java/org/hibernate/query/sql/spi/SelectInterpretationsKey.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,36 +22,36 @@ public class SelectInterpretationsKey implements QueryInterpretationCache.Key {
2222
private final String sql;
2323
private final JdbcValuesMappingProducer jdbcValuesMappingProducer;
2424
private final Collection<String> querySpaces;
25-
private final TupleTransformer tupleTransformer;
26-
private final ResultListTransformer resultListTransformer;
2725
private final int hash;
2826

27+
@Deprecated(forRemoval = true)
2928
public SelectInterpretationsKey(
3029
String sql,
3130
JdbcValuesMappingProducer jdbcValuesMappingProducer,
3231
Collection<String> querySpaces,
3332
TupleTransformer tupleTransformer,
3433
ResultListTransformer resultListTransformer) {
34+
this( sql, jdbcValuesMappingProducer, querySpaces );
35+
}
36+
37+
public SelectInterpretationsKey(
38+
String sql,
39+
JdbcValuesMappingProducer jdbcValuesMappingProducer,
40+
Collection<String> querySpaces) {
3541
this.sql = sql;
3642
this.jdbcValuesMappingProducer = jdbcValuesMappingProducer;
3743
this.querySpaces = querySpaces;
38-
this.tupleTransformer = tupleTransformer;
39-
this.resultListTransformer = resultListTransformer;
4044
this.hash = generateHashCode();
4145
}
4246

4347
private SelectInterpretationsKey(
4448
String sql,
4549
JdbcValuesMappingProducer jdbcValuesMappingProducer,
4650
Collection<String> querySpaces,
47-
TupleTransformer tupleTransformer,
48-
ResultListTransformer resultListTransformer,
4951
int hash) {
5052
this.sql = sql;
5153
this.jdbcValuesMappingProducer = jdbcValuesMappingProducer;
5254
this.querySpaces = querySpaces;
53-
this.tupleTransformer = tupleTransformer;
54-
this.resultListTransformer = resultListTransformer;
5555
this.hash = hash;
5656
}
5757

@@ -66,8 +66,6 @@ public QueryInterpretationCache.Key prepareForStore() {
6666
sql,
6767
jdbcValuesMappingProducer.cacheKeyInstance(),
6868
new HashSet<>( querySpaces ),
69-
tupleTransformer,
70-
resultListTransformer,
7169
hash
7270
);
7371
}
@@ -94,7 +92,6 @@ public boolean equals(Object o) {
9492
return sql.equals( that.sql )
9593
&& Objects.equals( jdbcValuesMappingProducer, that.jdbcValuesMappingProducer )
9694
&& Objects.equals( querySpaces, that.querySpaces )
97-
&& Objects.equals( tupleTransformer, that.tupleTransformer )
98-
&& Objects.equals( resultListTransformer, that.resultListTransformer );
95+
;
9996
}
10097
}

hibernate-core/src/main/java/org/hibernate/query/sqm/internal/ConcreteSqmSelectQueryPlan.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@
7676
public class ConcreteSqmSelectQueryPlan<R> implements SelectQueryPlan<R> {
7777
private final SqmSelectStatement<?> sqm;
7878
private final DomainParameterXref domainParameterXref;
79-
private final RowTransformer<R> rowTransformer;
8079
private final SqmInterpreter<Object, ResultsConsumer<?, R>> executeQueryInterpreter;
8180
private final SqmInterpreter<List<R>, Void> listInterpreter;
8281
private final SqmInterpreter<ScrollableResultsImplementor<R>, ScrollMode> scrollInterpreter;
@@ -93,8 +92,6 @@ public ConcreteSqmSelectQueryPlan(
9392
this.sqm = sqm;
9493
this.domainParameterXref = domainParameterXref;
9594

96-
this.rowTransformer = determineRowTransformer( sqm, resultType, tupleMetadata, queryOptions );
97-
9895
final ListResultsConsumer.UniqueSemantic uniqueSemantic;
9996
if ( sqm.producesUniqueResults() && !AppliedGraphs.containsCollectionFetches( queryOptions ) ) {
10097
uniqueSemantic = ListResultsConsumer.UniqueSemantic.NONE;
@@ -122,7 +119,7 @@ public ConcreteSqmSelectQueryPlan(
122119
jdbcSelect,
123120
jdbcParameterBindings,
124121
listInterpreterExecutionContext( hql, executionContext, jdbcSelect, subSelectFetchKeyHandler ),
125-
rowTransformer,
122+
determineRowTransformer( sqm, resultType, tupleMetadata, executionContext.getQueryOptions() ),
126123
null,
127124
resultCountEstimate,
128125
resultsConsumer
@@ -153,7 +150,7 @@ public ConcreteSqmSelectQueryPlan(
153150
jdbcSelect,
154151
jdbcParameterBindings,
155152
listInterpreterExecutionContext( hql, executionContext, jdbcSelect, subSelectFetchKeyHandler ),
156-
rowTransformer,
153+
determineRowTransformer( sqm, resultType, tupleMetadata, executionContext.getQueryOptions() ),
157154
(Class<R>) executionContext.getResultType(),
158155
uniqueSemantic,
159156
resultCountEstimate
@@ -189,7 +186,7 @@ public ConcreteSqmSelectQueryPlan(
189186
scrollMode,
190187
jdbcParameterBindings,
191188
new SqmJdbcExecutionContextAdapter( executionContext, jdbcSelect ),
192-
rowTransformer,
189+
determineRowTransformer( sqm, resultType, tupleMetadata, executionContext.getQueryOptions() ),
193190
resultCountEstimate
194191
);
195192
}

hibernate-core/src/main/java/org/hibernate/query/sqm/internal/SqmInterpretationsKey.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414

1515
import org.hibernate.LockOptions;
1616
import org.hibernate.engine.spi.LoadQueryInfluencers;
17-
import org.hibernate.query.ResultListTransformer;
18-
import org.hibernate.query.TupleTransformer;
1917
import org.hibernate.query.spi.QueryInterpretationCache;
2018
import org.hibernate.query.spi.QueryOptions;
2119
import org.hibernate.query.sqm.tree.SqmStatement;
@@ -50,8 +48,6 @@ public static SqmInterpretationsKey createInterpretationsKey(InterpretationsKeyS
5048
query.hashCode(),
5149
keySource.getResultType(),
5250
keySource.getQueryOptions().getLockOptions(),
53-
keySource.getQueryOptions().getTupleTransformer(),
54-
keySource.getQueryOptions().getResultListTransformer(),
5551
memoryEfficientDefensiveSetCopy( keySource.getLoadQueryInfluencers().getEnabledFetchProfileNames() )
5652
);
5753
}
@@ -110,8 +106,6 @@ public static QueryInterpretationCache.Key generateNonSelectKey(InterpretationsK
110106
private final Object query;
111107
private final Class<?> resultType;
112108
private final LockOptions lockOptions;
113-
private final TupleTransformer<?> tupleTransformer;
114-
private final ResultListTransformer<?> resultListTransformer;
115109
private final Collection<String> enabledFetchProfiles;
116110
private final int hashcode;
117111

@@ -120,15 +114,11 @@ private SqmInterpretationsKey(
120114
int hash,
121115
Class<?> resultType,
122116
LockOptions lockOptions,
123-
TupleTransformer<?> tupleTransformer,
124-
ResultListTransformer<?> resultListTransformer,
125117
Collection<String> enabledFetchProfiles) {
126118
this.query = query;
127119
this.hashcode = hash;
128120
this.resultType = resultType;
129121
this.lockOptions = lockOptions;
130-
this.tupleTransformer = tupleTransformer;
131-
this.resultListTransformer = resultListTransformer;
132122
this.enabledFetchProfiles = enabledFetchProfiles;
133123
}
134124

@@ -140,8 +130,6 @@ public QueryInterpretationCache.Key prepareForStore() {
140130
resultType,
141131
// Since lock options might be mutable, we need a copy for the cache key
142132
lockOptions.makeDefensiveCopy(),
143-
tupleTransformer,
144-
resultListTransformer,
145133
enabledFetchProfiles
146134
);
147135
}
@@ -165,8 +153,6 @@ public boolean equals(Object o) {
165153
&& query.equals( that.query )
166154
&& Objects.equals( resultType, that.resultType )
167155
&& Objects.equals( lockOptions, that.lockOptions )
168-
&& Objects.equals( tupleTransformer, that.tupleTransformer )
169-
&& Objects.equals( resultListTransformer, that.resultListTransformer )
170156
&& Objects.equals( enabledFetchProfiles, that.enabledFetchProfiles );
171157
}
172158

0 commit comments

Comments
 (0)