Skip to content

Commit 0a2c229

Browse files
committed
HHH-19010 get rid of inheritance of SessionFactoryImplementor from query creation context stuff
Let's make the NodeBuilder the thing that is the SqmCreationContext, and introduce a new thing that performs a similar role for SqlAstCreationContext. The reason here is twofold: - it is part of my long struggle to decouple query parsing/typing from the SessionFactory, in order to make HibernateProcessor less of a hack and I guess more robust - SessionFactoryImplementor was already starting to be polluted with weird little operations that didn't belong there. That will only get worse with time.
1 parent 09fbe7d commit 0a2c229

File tree

144 files changed

+892
-777
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

144 files changed

+892
-777
lines changed

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixSqmToSqlAstConverter.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ public InformixSqmToSqlAstConverter(
5050

5151
@Override
5252
public QuerySpec visitQuerySpec(SqmQuerySpec<?> sqmQuerySpec) {
53-
final boolean needsDummy = this.needsDummyTableGroup;
54-
this.needsDummyTableGroup = false;
53+
final boolean needsDummy = needsDummyTableGroup;
54+
needsDummyTableGroup = false;
5555
try {
5656
final QuerySpec querySpec = super.visitQuerySpec( sqmQuerySpec );
57-
if ( this.needsDummyTableGroup ) {
57+
if ( needsDummyTableGroup ) {
5858
querySpec.getFromClause().addRoot(
5959
new StandardTableGroup(
6060
true,
@@ -70,7 +70,7 @@ public QuerySpec visitQuerySpec(SqmQuerySpec<?> sqmQuerySpec) {
7070
return querySpec;
7171
}
7272
finally {
73-
this.needsDummyTableGroup = needsDummy;
73+
needsDummyTableGroup = needsDummy;
7474
}
7575
}
7676

hibernate-core/src/main/java/org/hibernate/boot/query/HbmResultSetMappingDescriptor.java

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,6 @@
44
*/
55
package org.hibernate.boot.query;
66

7-
import java.util.ArrayList;
8-
import java.util.Collections;
9-
import java.util.HashMap;
10-
import java.util.HashSet;
11-
import java.util.List;
12-
import java.util.Locale;
13-
import java.util.Map;
14-
import java.util.Set;
15-
import java.util.StringTokenizer;
16-
import java.util.function.Supplier;
17-
187
import org.hibernate.LockMode;
198
import org.hibernate.MappingException;
209
import org.hibernate.boot.BootLogging;
@@ -43,10 +32,9 @@
4332
import org.hibernate.metamodel.mapping.EntityMappingType;
4433
import org.hibernate.metamodel.mapping.PluralAttributeMapping;
4534
import org.hibernate.persister.collection.CollectionPersister;
35+
import org.hibernate.query.internal.FetchMementoBasicStandard;
4636
import org.hibernate.query.internal.FetchMementoEmbeddableStandard;
4737
import org.hibernate.query.internal.FetchMementoEntityStandard;
48-
import org.hibernate.spi.NavigablePath;
49-
import org.hibernate.query.internal.FetchMementoBasicStandard;
5038
import org.hibernate.query.internal.FetchMementoHbmStandard;
5139
import org.hibernate.query.internal.FetchMementoHbmStandard.FetchParentMemento;
5240
import org.hibernate.query.internal.NamedResultSetMappingMementoImpl;
@@ -58,11 +46,23 @@
5846
import org.hibernate.query.named.FetchMementoBasic;
5947
import org.hibernate.query.named.NamedResultSetMappingMemento;
6048
import org.hibernate.query.named.ResultMemento;
49+
import org.hibernate.spi.NavigablePath;
6150
import org.hibernate.sql.results.graph.Fetchable;
6251
import org.hibernate.sql.results.graph.FetchableContainer;
6352
import org.hibernate.sql.results.graph.entity.EntityValuedFetchable;
6453
import org.hibernate.type.BasicType;
6554

55+
import java.util.ArrayList;
56+
import java.util.Collections;
57+
import java.util.HashMap;
58+
import java.util.HashSet;
59+
import java.util.List;
60+
import java.util.Locale;
61+
import java.util.Map;
62+
import java.util.Set;
63+
import java.util.StringTokenizer;
64+
import java.util.function.Supplier;
65+
6666
/**
6767
* Boot-time descriptor of a result set mapping as defined in an {@code hbm.xml} file
6868
* either implicitly or explicitly
@@ -372,10 +372,8 @@ public ResultMemento resolve(ResultSetMappingResolutionContext resolutionContext
372372
registrationName
373373
);
374374

375-
final EntityMappingType entityDescriptor = resolutionContext
376-
.getSessionFactory()
377-
.getRuntimeMetamodels()
378-
.getEntityMappingType( entityName );
375+
final EntityMappingType entityDescriptor =
376+
resolutionContext.getMappingMetamodel().getEntityDescriptor( entityName );
379377
applyFetchJoins( joinDescriptorsAccess, tableAlias, propertyFetchDescriptors );
380378

381379
final NavigablePath entityPath = new NavigablePath( entityName );
@@ -421,10 +419,8 @@ public ResultMemento resolve(ResultSetMappingResolutionContext resolutionContext
421419
@Override
422420
public FetchParentMemento resolveParentMemento(ResultSetMappingResolutionContext resolutionContext) {
423421
if ( thisAsParentMemento == null ) {
424-
final EntityMappingType entityDescriptor = resolutionContext
425-
.getSessionFactory()
426-
.getRuntimeMetamodels()
427-
.getEntityMappingType( entityName );
422+
final EntityMappingType entityDescriptor =
423+
resolutionContext.getMappingMetamodel().getEntityDescriptor( entityName );
428424
thisAsParentMemento = new HbmFetchParentMemento(
429425
new NavigablePath( entityDescriptor.getEntityName() ),
430426
entityDescriptor
@@ -916,10 +912,9 @@ public ResultMemento resolve(ResultSetMappingResolutionContext resolutionContext
916912
@Override
917913
public FetchParentMemento resolveParentMemento(ResultSetMappingResolutionContext resolutionContext) {
918914
if ( thisAsParentMemento == null ) {
919-
final CollectionPersister collectionDescriptor = resolutionContext.getSessionFactory()
920-
.getRuntimeMetamodels()
921-
.getMappingMetamodel()
922-
.getCollectionDescriptor( collectionPath.getFullPath() );
915+
final CollectionPersister collectionDescriptor =
916+
resolutionContext.getMappingMetamodel()
917+
.getCollectionDescriptor( collectionPath.getFullPath() );
923918

924919
thisAsParentMemento = new HbmFetchParentMemento( collectionPath, collectionDescriptor.getAttributeMapping() );
925920
}
@@ -957,10 +952,9 @@ public ResultMementoBasicStandard resolve(ResultSetMappingResolutionContext reso
957952
);
958953

959954
if ( hibernateTypeName != null ) {
960-
final BasicType<?> namedType = resolutionContext.getSessionFactory()
961-
.getTypeConfiguration()
962-
.getBasicTypeRegistry()
963-
.getRegisteredType( hibernateTypeName );
955+
final BasicType<?> namedType =
956+
resolutionContext.getTypeConfiguration().getBasicTypeRegistry()
957+
.getRegisteredType( hibernateTypeName );
964958

965959
if ( namedType == null ) {
966960
throw new IllegalArgumentException( "Could not resolve named type : " + hibernateTypeName );

hibernate-core/src/main/java/org/hibernate/boot/query/SqlResultSetMappingDescriptor.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,8 @@
1212

1313
import org.hibernate.LockMode;
1414
import org.hibernate.MappingException;
15-
import org.hibernate.engine.spi.SessionFactoryImplementor;
1615
import org.hibernate.internal.util.StringHelper;
1716
import org.hibernate.internal.util.collections.ArrayHelper;
18-
import org.hibernate.metamodel.RuntimeMetamodels;
1917
import org.hibernate.metamodel.mapping.BasicValuedModelPart;
2018
import org.hibernate.metamodel.mapping.EntityDiscriminatorMapping;
2119
import org.hibernate.metamodel.mapping.EntityMappingType;
@@ -214,10 +212,9 @@ public ResultMemento resolve(ResultSetMappingResolutionContext resolutionContext
214212
(mapping) -> argumentResultMementos.add( mapping.resolve( resolutionContext ) )
215213
);
216214

217-
final SessionFactoryImplementor sessionFactory = resolutionContext.getSessionFactory();
218-
final JavaType<?> targetJtd = sessionFactory.getTypeConfiguration()
219-
.getJavaTypeRegistry()
220-
.getDescriptor( targetJavaType );
215+
final JavaType<?> targetJtd =
216+
resolutionContext.getTypeConfiguration().getJavaTypeRegistry()
217+
.getDescriptor( targetJavaType );
221218

222219
return new ResultMementoInstantiationStandard( targetJtd, argumentResultMementos );
223220
}
@@ -270,8 +267,8 @@ private static Map<String, AttributeFetchDescriptor> extractFetchMappings(
270267

271268
@Override
272269
public ResultMemento resolve(ResultSetMappingResolutionContext resolutionContext) {
273-
final RuntimeMetamodels runtimeMetamodels = resolutionContext.getSessionFactory().getRuntimeMetamodels();
274-
final EntityMappingType entityDescriptor = runtimeMetamodels.getEntityMappingType( entityName );
270+
final EntityMappingType entityDescriptor =
271+
resolutionContext.getMappingMetamodel().getEntityDescriptor( entityName );
275272

276273
final FetchMementoBasic discriminatorMemento = resolveDiscriminatorMemento(
277274
entityDescriptor,
@@ -366,8 +363,8 @@ private void addColumn(FieldResult fieldResult) {
366363

367364
@Override
368365
public ResultMemento asResultMemento(NavigablePath path, ResultSetMappingResolutionContext resolutionContext) {
369-
final RuntimeMetamodels runtimeMetamodels = resolutionContext.getSessionFactory().getRuntimeMetamodels();
370-
final EntityMappingType entityMapping = runtimeMetamodels.getEntityMappingType( entityName );
366+
final EntityMappingType entityMapping =
367+
resolutionContext.getMappingMetamodel().getEntityDescriptor( entityName );
371368

372369
final ModelPart subPart = entityMapping.findSubPart( propertyPath, null );
373370

@@ -386,8 +383,8 @@ public ResultMemento asResultMemento(NavigablePath path, ResultSetMappingResolut
386383

387384
@Override
388385
public FetchMemento resolve(ResultSetMappingResolutionContext resolutionContext) {
389-
final RuntimeMetamodels runtimeMetamodels = resolutionContext.getSessionFactory().getRuntimeMetamodels();
390-
final EntityMappingType entityMapping = runtimeMetamodels.getEntityMappingType( entityName );
386+
final EntityMappingType entityMapping =
387+
resolutionContext.getMappingMetamodel().getEntityDescriptor( entityName );
391388

392389
ModelPart subPart = entityMapping.findSubPart(
393390
propertyPathParts[0],

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import java.util.List;
1111
import java.util.Map;
1212

13-
import org.hibernate.engine.spi.SessionFactoryImplementor;
1413
import org.hibernate.metamodel.mapping.BasicValuedMapping;
1514
import org.hibernate.metamodel.mapping.JdbcMapping;
1615
import org.hibernate.metamodel.model.domain.ReturnableType;
@@ -92,8 +91,6 @@ public QuerySpec transform(
9291
CteContainer cteContainer,
9392
QuerySpec querySpec,
9493
SqmToSqlAstConverter converter) {
95-
final SessionFactoryImplementor factory = converter.getCreationContext()
96-
.getSessionFactory();
9794
final QuerySpec outerQuerySpec = new QuerySpec( querySpec.isRoot() );
9895
final String identifierVariable = "hhh_";
9996
final NavigablePath navigablePath = new NavigablePath(
@@ -400,7 +397,7 @@ protected <X extends SqlAstNode> X replaceExpression(X expression) {
400397
columnNames,
401398
false,
402399
true,
403-
factory
400+
converter.getCreationContext().getSessionFactory()
404401
);
405402
outerQuerySpec.getFromClause().addRoot( queryPartTableGroup );
406403

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.hibernate.metamodel.mapping.JdbcMapping;
1515
import org.hibernate.metamodel.model.domain.DomainType;
1616
import org.hibernate.metamodel.model.domain.ReturnableType;
17+
import org.hibernate.query.BindingContext;
1718
import org.hibernate.query.sqm.SqmExpressible;
1819
import org.hibernate.query.sqm.function.AbstractSqmSelfRenderingFunctionDescriptor;
1920
import org.hibernate.query.sqm.function.FunctionKind;
@@ -150,7 +151,7 @@ public static class Validator implements ArgumentsValidator {
150151
public void validate(
151152
List<? extends SqmTypedNode<?>> arguments,
152153
String functionName,
153-
TypeConfiguration typeConfiguration) {
154+
BindingContext bindingContext) {
154155
if ( arguments.size() != 1 ) {
155156
throw new FunctionArgumentException(
156157
String.format(
@@ -166,7 +167,7 @@ public void validate(
166167
final SqmExpressible<?> expressible = argument.getExpressible();
167168
final DomainType<?> domainType;
168169
if ( expressible != null && ( domainType = expressible.getSqmType() ) != null ) {
169-
final JdbcType jdbcType = getJdbcType( domainType, typeConfiguration );
170+
final JdbcType jdbcType = getJdbcType( domainType, bindingContext.getTypeConfiguration() );
170171
if ( !isNumeric( jdbcType ) ) {
171172
throw new FunctionArgumentException(
172173
String.format(
@@ -230,7 +231,8 @@ public BasicValuedMapping resolveFunctionReturnType(
230231
if ( impliedType != null ) {
231232
return impliedType;
232233
}
233-
final JdbcMapping jdbcMapping = ( (Expression) arguments.get( 0 ) ).getExpressionType().getSingleJdbcMapping();
234+
Expression expression = (Expression) arguments.get( 0 );
235+
final JdbcMapping jdbcMapping = expression.getExpressionType().getSingleJdbcMapping();
234236
if ( jdbcMapping instanceof BasicPluralType<?, ?> ) {
235237
return (BasicValuedMapping) jdbcMapping;
236238
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import org.hibernate.QueryException;
1111
import org.hibernate.metamodel.model.domain.ReturnableType;
12+
import org.hibernate.query.BindingContext;
1213
import org.hibernate.query.sqm.function.AbstractSqmSelfRenderingFunctionDescriptor;
1314
import org.hibernate.query.sqm.produce.function.ArgumentTypesValidator;
1415
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
@@ -41,7 +42,7 @@ public ChrLiteralEmulation(TypeConfiguration typeConfiguration) {
4142
StandardArgumentsValidators.exactly(1),
4243
new ArgumentsValidator() {
4344
@Override
44-
public void validate(List<? extends SqmTypedNode<?>> arguments, String functionName, TypeConfiguration typeConfiguration) {
45+
public void validate(List<? extends SqmTypedNode<?>> arguments, String functionName, BindingContext bindingContext) {
4546
if ( !( arguments.get( 0 ) instanceof SqmLiteral<?> ) ) {
4647
throw new QueryException(
4748
String.format(

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,9 @@ protected CteStatement createSeriesCte(SqmToSqlAstConverter converter) {
150150
}
151151

152152
public static CteStatement createSeriesCte(int maxSeriesSize, SqmToSqlAstConverter converter) {
153-
final BasicType<Long> longType = converter.getCreationContext().getTypeConfiguration()
154-
.getBasicTypeForJavaType( Long.class );
153+
final BasicType<Long> longType =
154+
converter.getCreationContext().getTypeConfiguration()
155+
.getBasicTypeForJavaType( Long.class );
155156
final Expression one = new UnparsedNumericLiteral<>( "1", NumericTypeCategory.LONG, longType );
156157
final List<CteColumn> cteColumns = List.of( new CteColumn( "i", longType ) );
157158

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

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.List;
88

99
import org.hibernate.metamodel.model.domain.ReturnableType;
10+
import org.hibernate.query.BindingContext;
1011
import org.hibernate.query.spi.QueryEngine;
1112
import org.hibernate.query.sqm.function.FunctionKind;
1213
import org.hibernate.query.sqm.function.SelfRenderingSqmFunction;
@@ -16,7 +17,6 @@
1617
import org.hibernate.query.sqm.tree.SqmTypedNode;
1718
import org.hibernate.query.sqm.tree.predicate.SqmPredicate;
1819
import org.hibernate.query.sqm.tree.select.SqmOrderByClause;
19-
import org.hibernate.type.spi.TypeConfiguration;
2020

2121
/**
2222
* A function that dynamically dispatches to other functions,
@@ -61,10 +61,7 @@ public <T> SelfRenderingSqmFunction<T> generateSqmExpression(
6161
List<? extends SqmTypedNode<?>> arguments,
6262
ReturnableType<T> impliedResultType,
6363
QueryEngine queryEngine) {
64-
final SqmFunctionDescriptor functionDescriptor = validateGetFunction(
65-
arguments,
66-
queryEngine.getTypeConfiguration()
67-
);
64+
final SqmFunctionDescriptor functionDescriptor = validateGetFunction( arguments, queryEngine );
6865
return functionDescriptor.generateSqmExpression( arguments, impliedResultType, queryEngine );
6966
}
7067

@@ -74,10 +71,7 @@ public <T> SelfRenderingSqmFunction<T> generateAggregateSqmExpression(
7471
SqmPredicate filter,
7572
ReturnableType<T> impliedResultType,
7673
QueryEngine queryEngine) {
77-
final SqmFunctionDescriptor functionDescriptor = validateGetFunction(
78-
arguments,
79-
queryEngine.getTypeConfiguration()
80-
);
74+
final SqmFunctionDescriptor functionDescriptor = validateGetFunction( arguments, queryEngine );
8175
return functionDescriptor.generateAggregateSqmExpression(
8276
arguments,
8377
filter,
@@ -93,10 +87,7 @@ public <T> SelfRenderingSqmFunction<T> generateOrderedSetAggregateSqmExpression(
9387
SqmOrderByClause withinGroupClause,
9488
ReturnableType<T> impliedResultType,
9589
QueryEngine queryEngine) {
96-
final SqmFunctionDescriptor functionDescriptor = validateGetFunction(
97-
arguments,
98-
queryEngine.getTypeConfiguration()
99-
);
90+
final SqmFunctionDescriptor functionDescriptor = validateGetFunction( arguments, queryEngine );
10091
return functionDescriptor.generateOrderedSetAggregateSqmExpression(
10192
arguments,
10293
filter,
@@ -114,10 +105,7 @@ public <T> SelfRenderingSqmFunction<T> generateWindowSqmExpression(
114105
Boolean fromFirst,
115106
ReturnableType<T> impliedResultType,
116107
QueryEngine queryEngine) {
117-
final SqmFunctionDescriptor functionDescriptor = validateGetFunction(
118-
arguments,
119-
queryEngine.getTypeConfiguration()
120-
);
108+
final SqmFunctionDescriptor functionDescriptor = validateGetFunction( arguments, queryEngine );
121109
return functionDescriptor.generateWindowSqmExpression(
122110
arguments,
123111
filter,
@@ -137,21 +125,21 @@ public ArgumentsValidator getArgumentsValidator() {
137125
public void validate(
138126
List<? extends SqmTypedNode<?>> arguments,
139127
String functionName,
140-
TypeConfiguration typeConfiguration) {
141-
validateGetFunction( arguments, typeConfiguration );
128+
BindingContext bindingContext) {
129+
validateGetFunction( arguments, bindingContext );
142130
}
143131

144132
private SqmFunctionDescriptor validateGetFunction(
145133
List<? extends SqmTypedNode<?>> arguments,
146-
TypeConfiguration typeConfiguration) {
134+
BindingContext bindingContext) {
147135
RuntimeException exception = null;
148136
for ( String overload : functionNames ) {
149137
final SqmFunctionDescriptor functionDescriptor = functionRegistry.findFunctionDescriptor( overload );
150138
if ( functionDescriptor == null ) {
151139
throw new IllegalArgumentException( "No function registered under the name '" + overload + "'" );
152140
}
153141
try {
154-
functionDescriptor.getArgumentsValidator().validate( arguments, overload, typeConfiguration );
142+
functionDescriptor.getArgumentsValidator().validate( arguments, overload, bindingContext );
155143
return functionDescriptor;
156144
}
157145
catch (RuntimeException ex) {

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,7 @@ public Expression convertToSqlAst(SqmToSqlAstConverter walker) {
221221
final FunctionRenderer substringFunction = getFunction( walker, "substring", 3 );
222222
final BasicType<String> stringType = typeConfiguration.getBasicTypeRegistry()
223223
.resolve( StandardBasicTypes.STRING );
224-
final Dialect dialect =
225-
walker.getCreationContext().getSessionFactory().getJdbcServices()
226-
.getDialect();
224+
final Dialect dialect = walker.getCreationContext().getDialect();
227225
Expression formatExpression = null;
228226
final StringBuilder sb = new StringBuilder();
229227
final StringBuilderSqlAppender sqlAppender = new StringBuilderSqlAppender( sb );
@@ -425,13 +423,12 @@ public Expression convertToSqlAst(SqmToSqlAstConverter walker) {
425423

426424
private FunctionRenderer getFunction(SqmToSqlAstConverter walker, String name) {
427425
return (FunctionRenderer)
428-
walker.getCreationContext().getSessionFactory().getQueryEngine()
429-
.getSqmFunctionRegistry().findFunctionDescriptor( name );
426+
walker.getCreationContext().getSqmFunctionRegistry().findFunctionDescriptor( name );
430427
}
431428

432429
private FunctionRenderer getFunction(SqmToSqlAstConverter walker, String name, int argumentCount) {
433430
final SqmFunctionDescriptor functionDescriptor =
434-
walker.getCreationContext().getSessionFactory().getQueryEngine().getSqmFunctionRegistry()
431+
walker.getCreationContext().getSqmFunctionRegistry()
435432
.findFunctionDescriptor( name );
436433
if ( functionDescriptor instanceof MultipatternSqmFunctionDescriptor multipatternSqmFunctionDescriptor ) {
437434
return (FunctionRenderer) multipatternSqmFunctionDescriptor.getFunction( argumentCount );

0 commit comments

Comments
 (0)