Skip to content

Commit 850a2a0

Browse files
beikovsebersole
authored andcommitted
HHH-18271 Avoid query validations of cached queries by doing validation eagerly. Cache allowed result types per query interpretation
1 parent cf44c30 commit 850a2a0

20 files changed

+684
-632
lines changed

hibernate-core/src/main/java/org/hibernate/query/hql/internal/SemanticQueryBuilder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,7 @@ public SqmInsertStatement<R> visitInsertStatement(HqlParser.InsertStatementConte
555555
queryExpressionContext.accept( this );
556556

557557
insertStatement.onConflict( visitConflictClause( ctx.conflictClause() ) );
558+
insertStatement.validate( query );
558559
return insertStatement;
559560
}
560561
finally {
@@ -613,6 +614,7 @@ public SqmInsertStatement<R> visitInsertStatement(HqlParser.InsertStatementConte
613614

614615
insertStatement.values( valuesList );
615616
insertStatement.onConflict( visitConflictClause( ctx.conflictClause() ) );
617+
insertStatement.validate( query );
616618
return insertStatement;
617619
}
618620
finally {
@@ -684,6 +686,7 @@ public SqmUpdateStatement<R> visitUpdateStatement(HqlParser.UpdateStatementConte
684686
updateStatement.applyPredicate( visitWhereClause( whereClauseContext ) );
685687
}
686688

689+
updateStatement.validate( query );
687690
return updateStatement;
688691
}
689692
finally {

hibernate-core/src/main/java/org/hibernate/query/internal/QueryInterpretationCacheDisabledImpl.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.hibernate.query.sql.spi.ParameterInterpretation;
2020
import org.hibernate.query.sqm.internal.DomainParameterXref;
2121
import org.hibernate.query.sqm.tree.SqmStatement;
22+
import org.hibernate.query.sqm.tree.select.SqmSelectStatement;
2223
import org.hibernate.stat.spi.StatisticsImplementor;
2324

2425
/**
@@ -72,7 +73,7 @@ public <R> HqlInterpretation<R> resolveHqlInterpretation(
7273
final DomainParameterXref domainParameterXref;
7374
final ParameterMetadataImplementor parameterMetadata;
7475
if ( sqmStatement.getSqmParameters().isEmpty() ) {
75-
domainParameterXref = DomainParameterXref.empty();
76+
domainParameterXref = DomainParameterXref.EMPTY;
7677
parameterMetadata = ParameterMetadataImpl.EMPTY;
7778
}
7879
else {
@@ -101,6 +102,12 @@ public ParameterMetadataImplementor getParameterMetadata() {
101102
public DomainParameterXref getDomainParameterXref() {
102103
return domainParameterXref;
103104
}
105+
106+
@Override
107+
public void validateResultType(Class<?> resultType) {
108+
assert sqmStatement instanceof SqmSelectStatement<?>;
109+
( (SqmSelectStatement<R>) sqmStatement ).validateResultType( resultType );
110+
}
104111
};
105112
}
106113

hibernate-core/src/main/java/org/hibernate/query/internal/QueryInterpretationCacheStandardImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ protected static <R> HqlInterpretation<R> createHqlInterpretation(
147147
final DomainParameterXref domainParameterXref;
148148

149149
if ( sqmStatement.getSqmParameters().isEmpty() ) {
150-
domainParameterXref = DomainParameterXref.empty();
150+
domainParameterXref = DomainParameterXref.EMPTY;
151151
parameterMetadata = ParameterMetadataImpl.EMPTY;
152152
}
153153
else {

0 commit comments

Comments
 (0)