Skip to content

Commit 90c1835

Browse files
committed
HHH-19560 Remove TupleTransformer and ResultListTransformer from interpretation caching
1 parent 0ab513b commit 90c1835

File tree

5 files changed

+39
-40
lines changed

5 files changed

+39
-40
lines changed

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

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

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

12+
import org.hibernate.metamodel.mapping.BasicValuedMapping;
13+
import org.hibernate.query.ReturnableType;
1114
import org.hibernate.query.sqm.function.AbstractSqmSelfRenderingFunctionDescriptor;
15+
import org.hibernate.query.sqm.produce.function.FunctionReturnTypeResolver;
1216
import org.hibernate.query.sqm.produce.function.StandardArgumentsValidators;
13-
import org.hibernate.query.sqm.produce.function.StandardFunctionReturnTypeResolvers;
17+
import org.hibernate.query.sqm.tree.SqmTypedNode;
1418
import org.hibernate.sql.ast.SqlAstTranslator;
1519
import org.hibernate.sql.ast.spi.SqlAppender;
1620
import org.hibernate.sql.ast.tree.SqlAstNode;
1721
import org.hibernate.sql.ast.tree.expression.QueryLiteral;
1822
import org.hibernate.type.JavaObjectType;
23+
import org.hibernate.type.spi.TypeConfiguration;
1924

2025
/**
2126
* A function to pass through a SQL fragment.
@@ -29,7 +34,23 @@ public SqlFunction() {
2934
super(
3035
"sql",
3136
StandardArgumentsValidators.min( 1 ),
32-
StandardFunctionReturnTypeResolvers.invariant( JavaObjectType.INSTANCE ),
37+
new FunctionReturnTypeResolver() {
38+
@Override
39+
public ReturnableType<?> resolveFunctionReturnType(
40+
ReturnableType<?> impliedType,
41+
List<? extends SqmTypedNode<?>> arguments,
42+
TypeConfiguration typeConfiguration) {
43+
return impliedType != null
44+
? impliedType
45+
: typeConfiguration.getBasicTypeForJavaType( Object.class );
46+
}
47+
48+
@Override
49+
public BasicValuedMapping resolveFunctionReturnType(Supplier<BasicValuedMapping> impliedTypeAccess, List<? extends SqlAstNode> arguments) {
50+
final BasicValuedMapping impliedType = impliedTypeAccess.get();
51+
return impliedType != null ? impliedType : JavaObjectType.INSTANCE;
52+
}
53+
},
3354
null
3455
);
3556
}

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
@@ -812,9 +812,7 @@ private SelectInterpretationsKey generateSelectInterpretationsKey(JdbcValuesMapp
812812
return new SelectInterpretationsKey(
813813
getQueryString(),
814814
resultSetMapping,
815-
getSynchronizedQuerySpaces(),
816-
getQueryOptions().getTupleTransformer(),
817-
getQueryOptions().getResultListTransformer()
815+
getSynchronizedQuerySpaces()
818816
);
819817
}
820818

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: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@
6969
public class ConcreteSqmSelectQueryPlan<R> implements SelectQueryPlan<R> {
7070
private final SqmSelectStatement<?> sqm;
7171
private final DomainParameterXref domainParameterXref;
72-
private final RowTransformer<R> rowTransformer;
7372
private final SqmInterpreter<List<R>, Void> listInterpreter;
7473
private final SqmInterpreter<ScrollableResultsImplementor<R>, ScrollMode> scrollInterpreter;
7574

@@ -85,8 +84,6 @@ public ConcreteSqmSelectQueryPlan(
8584
this.sqm = sqm;
8685
this.domainParameterXref = domainParameterXref;
8786

88-
this.rowTransformer = determineRowTransformer( sqm, resultType, tupleMetadata, queryOptions );
89-
9087
final ListResultsConsumer.UniqueSemantic uniqueSemantic;
9188
if ( sqm.producesUniqueResults() && !AppliedGraphs.containsCollectionFetches( queryOptions ) ) {
9289
uniqueSemantic = ListResultsConsumer.UniqueSemantic.NONE;
@@ -111,7 +108,7 @@ public ConcreteSqmSelectQueryPlan(
111108
jdbcSelect,
112109
jdbcParameterBindings,
113110
listInterpreterExecutionContext( hql, executionContext, jdbcSelect, subSelectFetchKeyHandler ),
114-
rowTransformer,
111+
determineRowTransformer( sqm, resultType, tupleMetadata, executionContext.getQueryOptions() ),
115112
uniqueSemantic
116113
);
117114
}
@@ -138,7 +135,7 @@ public ConcreteSqmSelectQueryPlan(
138135
scrollMode,
139136
jdbcParameterBindings,
140137
new SqmJdbcExecutionContextAdapter( executionContext, sqmInterpretation.jdbcSelect ),
141-
rowTransformer
138+
determineRowTransformer( sqm, resultType, tupleMetadata, executionContext.getQueryOptions() )
142139
);
143140
}
144141
finally {

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

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010

1111
import org.hibernate.LockOptions;
1212
import org.hibernate.engine.spi.LoadQueryInfluencers;
13-
import org.hibernate.query.ResultListTransformer;
14-
import org.hibernate.query.TupleTransformer;
1513
import org.hibernate.query.spi.QueryInterpretationCache;
1614
import org.hibernate.query.spi.QueryOptions;
1715

@@ -40,9 +38,7 @@ public static SqmInterpretationsKey createInterpretationsKey(InterpretationsKeyS
4038
return new SqmInterpretationsKey(
4139
keySource.getQueryString(),
4240
keySource.getResultType(),
43-
keySource.getQueryOptions().getLockOptions(),
44-
keySource.getQueryOptions().getTupleTransformer(),
45-
keySource.getQueryOptions().getResultListTransformer()
41+
keySource.getQueryOptions().getLockOptions()
4642
);
4743
}
4844
@SuppressWarnings("RedundantIfStatement")
@@ -90,20 +86,14 @@ public static QueryInterpretationCache.Key generateNonSelectKey(InterpretationsK
9086
private final String query;
9187
private final Class<?> resultType;
9288
private final LockOptions lockOptions;
93-
private final TupleTransformer<?> tupleTransformer;
94-
private final ResultListTransformer resultListTransformer;
9589

9690
private SqmInterpretationsKey(
9791
String query,
9892
Class<?> resultType,
99-
LockOptions lockOptions,
100-
TupleTransformer<?> tupleTransformer,
101-
ResultListTransformer resultListTransformer) {
93+
LockOptions lockOptions) {
10294
this.query = query;
10395
this.resultType = resultType;
10496
this.lockOptions = lockOptions;
105-
this.tupleTransformer = tupleTransformer;
106-
this.resultListTransformer = resultListTransformer;
10797
}
10898

10999
@Override
@@ -112,9 +102,7 @@ public QueryInterpretationCache.Key prepareForStore() {
112102
query,
113103
resultType,
114104
// Since lock options are mutable, we need a copy for the cache key
115-
lockOptions.makeCopy(),
116-
tupleTransformer,
117-
resultListTransformer
105+
lockOptions.makeCopy()
118106
);
119107
}
120108

@@ -135,9 +123,7 @@ public boolean equals(Object o) {
135123
final SqmInterpretationsKey that = (SqmInterpretationsKey) o;
136124
return query.equals( that.query )
137125
&& areEqual( resultType, that.resultType )
138-
&& areEqual( lockOptions, that.lockOptions )
139-
&& areEqual( tupleTransformer, that.tupleTransformer )
140-
&& areEqual( resultListTransformer, that.resultListTransformer );
126+
&& areEqual( lockOptions, that.lockOptions );
141127
}
142128

143129
private <T> boolean areEqual(T o1, T o2) {

0 commit comments

Comments
 (0)