Skip to content

Commit e9f2787

Browse files
committed
HHH-19560 Remove TupleTransformer and ResultListTransformer from interpretation caching
1 parent 74db5ed commit e9f2787

File tree

5 files changed

+38
-39
lines changed

5 files changed

+38
-39
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
@@ -5,16 +5,22 @@
55
package org.hibernate.dialect.function;
66

77
import java.util.List;
8+
import java.util.function.Supplier;
89

10+
import org.checkerframework.checker.nullness.qual.Nullable;
11+
import org.hibernate.metamodel.mapping.BasicValuedMapping;
912
import org.hibernate.metamodel.model.domain.ReturnableType;
1013
import org.hibernate.query.sqm.function.AbstractSqmSelfRenderingFunctionDescriptor;
14+
import org.hibernate.query.sqm.produce.function.FunctionReturnTypeResolver;
1115
import org.hibernate.query.sqm.produce.function.StandardArgumentsValidators;
12-
import org.hibernate.query.sqm.produce.function.StandardFunctionReturnTypeResolvers;
16+
import org.hibernate.query.sqm.sql.SqmToSqlAstConverter;
17+
import org.hibernate.query.sqm.tree.SqmTypedNode;
1318
import org.hibernate.sql.ast.SqlAstTranslator;
1419
import org.hibernate.sql.ast.spi.SqlAppender;
1520
import org.hibernate.sql.ast.tree.SqlAstNode;
1621
import org.hibernate.sql.ast.tree.expression.QueryLiteral;
1722
import org.hibernate.type.JavaObjectType;
23+
import org.hibernate.type.spi.TypeConfiguration;
1824

1925
/**
2026
* A function to pass through a SQL fragment.
@@ -28,7 +34,24 @@ public SqlFunction() {
2834
super(
2935
"sql",
3036
StandardArgumentsValidators.min( 1 ),
31-
StandardFunctionReturnTypeResolvers.invariant( JavaObjectType.INSTANCE ),
37+
new FunctionReturnTypeResolver() {
38+
@Override
39+
public ReturnableType<?> resolveFunctionReturnType(
40+
ReturnableType<?> impliedType,
41+
@Nullable SqmToSqlAstConverter converter,
42+
List<? extends SqmTypedNode<?>> arguments,
43+
TypeConfiguration typeConfiguration) {
44+
return impliedType != null
45+
? impliedType
46+
: typeConfiguration.getBasicTypeForJavaType( Object.class );
47+
}
48+
49+
@Override
50+
public BasicValuedMapping resolveFunctionReturnType(Supplier<BasicValuedMapping> impliedTypeAccess, List<? extends SqlAstNode> arguments) {
51+
final BasicValuedMapping impliedType = impliedTypeAccess.get();
52+
return impliedType != null ? impliedType : JavaObjectType.INSTANCE;
53+
}
54+
},
3255
null
3356
);
3457
}

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,13 +1005,10 @@ public static int determineBindValueMaxCount(boolean paddingEnabled, int inExprL
10051005
}
10061006

10071007
private SelectInterpretationsKey selectInterpretationsKey(ResultSetMapping resultSetMapping) {
1008-
final QueryOptions options = getQueryOptions();
10091008
return new SelectInterpretationsKey(
10101009
getQueryString(),
10111010
resultSetMapping,
1012-
getSynchronizedQuerySpaces(),
1013-
options.getTupleTransformer(),
1014-
options.getResultListTransformer()
1011+
getSynchronizedQuerySpaces()
10151012
);
10161013
}
10171014

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

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,36 +20,36 @@ public class SelectInterpretationsKey implements QueryInterpretationCache.Key {
2020
private final String sql;
2121
private final JdbcValuesMappingProducer jdbcValuesMappingProducer;
2222
private final Collection<String> querySpaces;
23-
private final TupleTransformer<?> tupleTransformer;
24-
private final ResultListTransformer<?> resultListTransformer;
2523
private final int hash;
2624

25+
@Deprecated(forRemoval = true)
2726
public SelectInterpretationsKey(
2827
String sql,
2928
JdbcValuesMappingProducer jdbcValuesMappingProducer,
3029
Collection<String> querySpaces,
3130
TupleTransformer<?> tupleTransformer,
3231
ResultListTransformer<?> resultListTransformer) {
32+
this( sql, jdbcValuesMappingProducer, querySpaces );
33+
}
34+
35+
public SelectInterpretationsKey(
36+
String sql,
37+
JdbcValuesMappingProducer jdbcValuesMappingProducer,
38+
Collection<String> querySpaces) {
3339
this.sql = sql;
3440
this.jdbcValuesMappingProducer = jdbcValuesMappingProducer;
3541
this.querySpaces = querySpaces;
36-
this.tupleTransformer = tupleTransformer;
37-
this.resultListTransformer = resultListTransformer;
3842
this.hash = generateHashCode();
3943
}
4044

4145
private SelectInterpretationsKey(
4246
String sql,
4347
JdbcValuesMappingProducer jdbcValuesMappingProducer,
4448
Collection<String> querySpaces,
45-
TupleTransformer<?> tupleTransformer,
46-
ResultListTransformer<?> resultListTransformer,
4749
int hash) {
4850
this.sql = sql;
4951
this.jdbcValuesMappingProducer = jdbcValuesMappingProducer;
5052
this.querySpaces = querySpaces;
51-
this.tupleTransformer = tupleTransformer;
52-
this.resultListTransformer = resultListTransformer;
5353
this.hash = hash;
5454
}
5555

@@ -64,8 +64,6 @@ public QueryInterpretationCache.Key prepareForStore() {
6464
sql,
6565
jdbcValuesMappingProducer.cacheKeyInstance(),
6666
new HashSet<>( querySpaces ),
67-
tupleTransformer,
68-
resultListTransformer,
6967
hash
7068
);
7169
}
@@ -89,8 +87,6 @@ public boolean equals(Object o) {
8987
}
9088
return sql.equals( that.sql )
9189
&& Objects.equals( jdbcValuesMappingProducer, that.jdbcValuesMappingProducer )
92-
&& Objects.equals( querySpaces, that.querySpaces )
93-
&& Objects.equals( tupleTransformer, that.tupleTransformer )
94-
&& Objects.equals( resultListTransformer, that.resultListTransformer );
90+
&& Objects.equals( querySpaces, that.querySpaces );
9591
}
9692
}

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
@@ -75,7 +75,6 @@
7575
public class ConcreteSqmSelectQueryPlan<R> implements SelectQueryPlan<R> {
7676
private final SqmSelectStatement<?> sqm;
7777
private final DomainParameterXref domainParameterXref;
78-
private final RowTransformer<R> rowTransformer;
7978
private final SqmInterpreter<?, ? extends ResultsConsumer<?, R>> executeQueryInterpreter;
8079
private final SqmInterpreter<List<R>, Void> listInterpreter;
8180
private final SqmInterpreter<ScrollableResultsImplementor<R>, ScrollMode> scrollInterpreter;
@@ -92,8 +91,6 @@ public ConcreteSqmSelectQueryPlan(
9291
this.sqm = sqm;
9392
this.domainParameterXref = domainParameterXref;
9493

95-
this.rowTransformer = determineRowTransformer( sqm, resultType, tupleMetadata, queryOptions );
96-
9794
final ListResultsConsumer.UniqueSemantic uniqueSemantic =
9895
sqm.producesUniqueResults() && !containsCollectionFetches( queryOptions )
9996
? ListResultsConsumer.UniqueSemantic.NONE
@@ -118,7 +115,7 @@ public ConcreteSqmSelectQueryPlan(
118115
jdbcSelect,
119116
jdbcParameterBindings,
120117
listInterpreterExecutionContext( hql, executionContext, jdbcSelect, subSelectFetchKeyHandler ),
121-
rowTransformer,
118+
determineRowTransformer( sqm, resultType, tupleMetadata, executionContext.getQueryOptions() ),
122119
null,
123120
resultCountEstimate,
124121
resultsConsumer
@@ -150,7 +147,7 @@ public ConcreteSqmSelectQueryPlan(
150147
jdbcSelect,
151148
jdbcParameterBindings,
152149
listInterpreterExecutionContext( hql, executionContext, jdbcSelect, subSelectFetchKeyHandler ),
153-
rowTransformer,
150+
determineRowTransformer( sqm, resultType, tupleMetadata, executionContext.getQueryOptions() ),
154151
(Class<R>) executionContext.getResultType(),
155152
uniqueSemantic,
156153
resultCountEstimate
@@ -186,7 +183,7 @@ public ConcreteSqmSelectQueryPlan(
186183
scrollMode,
187184
jdbcParameterBindings,
188185
new SqmJdbcExecutionContextAdapter( executionContext, jdbcSelect ),
189-
rowTransformer,
186+
determineRowTransformer( sqm, resultType, tupleMetadata, executionContext.getQueryOptions() ),
190187
resultCountEstimate
191188
);
192189
}

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
@@ -9,8 +9,6 @@
99
import java.util.Set;
1010

1111
import org.hibernate.LockOptions;
12-
import org.hibernate.query.ResultListTransformer;
13-
import org.hibernate.query.TupleTransformer;
1412
import org.hibernate.query.spi.QueryInterpretationCache;
1513
import org.hibernate.query.sqm.spi.InterpretationsKeySource;
1614

@@ -28,8 +26,6 @@ public static SqmInterpretationsKey createInterpretationsKey(InterpretationsKeyS
2826
query.hashCode(),
2927
keySource.getResultType(),
3028
keySource.getQueryOptions().getLockOptions(),
31-
keySource.getQueryOptions().getTupleTransformer(),
32-
keySource.getQueryOptions().getResultListTransformer(),
3329
memoryEfficientDefensiveSetCopy( keySource.getLoadQueryInfluencers().getEnabledFetchProfileNames() )
3430
);
3531
}
@@ -86,8 +82,6 @@ public static QueryInterpretationCache.Key generateNonSelectKey(InterpretationsK
8682
private final Object query;
8783
private final Class<?> resultType;
8884
private final LockOptions lockOptions;
89-
private final TupleTransformer<?> tupleTransformer;
90-
private final ResultListTransformer<?> resultListTransformer;
9185
private final Collection<String> enabledFetchProfiles;
9286
private final int hashCode;
9387

@@ -96,15 +90,11 @@ private SqmInterpretationsKey(
9690
int hash,
9791
Class<?> resultType,
9892
LockOptions lockOptions,
99-
TupleTransformer<?> tupleTransformer,
100-
ResultListTransformer<?> resultListTransformer,
10193
Collection<String> enabledFetchProfiles) {
10294
this.query = query;
10395
this.hashCode = hash;
10496
this.resultType = resultType;
10597
this.lockOptions = lockOptions;
106-
this.tupleTransformer = tupleTransformer;
107-
this.resultListTransformer = resultListTransformer;
10898
this.enabledFetchProfiles = enabledFetchProfiles;
10999
}
110100

@@ -116,8 +106,6 @@ public QueryInterpretationCache.Key prepareForStore() {
116106
resultType,
117107
// Since lock options might be mutable, we need a copy for the cache key
118108
lockOptions.makeDefensiveCopy(),
119-
tupleTransformer,
120-
resultListTransformer,
121109
enabledFetchProfiles
122110
);
123111
}
@@ -139,8 +127,6 @@ public boolean equals(Object other) {
139127
&& this.query.equals( that.query )
140128
&& Objects.equals( this.resultType, that.resultType )
141129
&& Objects.equals( this.lockOptions, that.lockOptions )
142-
&& Objects.equals( this.tupleTransformer, that.tupleTransformer )
143-
&& Objects.equals( this.resultListTransformer, that.resultListTransformer )
144130
&& Objects.equals( this.enabledFetchProfiles, that.enabledFetchProfiles );
145131
}
146132

0 commit comments

Comments
 (0)