diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixSqmToSqlAstConverter.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixSqmToSqlAstConverter.java
index 8db771321b7b..387732544b0a 100644
--- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixSqmToSqlAstConverter.java
+++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixSqmToSqlAstConverter.java
@@ -50,11 +50,11 @@ public InformixSqmToSqlAstConverter(
@Override
public QuerySpec visitQuerySpec(SqmQuerySpec> sqmQuerySpec) {
- final boolean needsDummy = this.needsDummyTableGroup;
- this.needsDummyTableGroup = false;
+ final boolean needsDummy = needsDummyTableGroup;
+ needsDummyTableGroup = false;
try {
final QuerySpec querySpec = super.visitQuerySpec( sqmQuerySpec );
- if ( this.needsDummyTableGroup ) {
+ if ( needsDummyTableGroup ) {
querySpec.getFromClause().addRoot(
new StandardTableGroup(
true,
@@ -70,7 +70,7 @@ public QuerySpec visitQuerySpec(SqmQuerySpec> sqmQuerySpec) {
return querySpec;
}
finally {
- this.needsDummyTableGroup = needsDummy;
+ needsDummyTableGroup = needsDummy;
}
}
diff --git a/hibernate-core/src/main/java/org/hibernate/SessionFactory.java b/hibernate-core/src/main/java/org/hibernate/SessionFactory.java
index 1f0e2f9b7e4e..e72a3fef6ffb 100644
--- a/hibernate-core/src/main/java/org/hibernate/SessionFactory.java
+++ b/hibernate-core/src/main/java/org/hibernate/SessionFactory.java
@@ -145,8 +145,9 @@ public interface SessionFactory extends EntityManagerFactory, Referenceable, Ser
String getJndiName();
/**
- * Obtain a {@linkplain SessionBuilder session builder} for creating
- * new {@link Session}s with certain customized options.
+ * Obtain a {@linkplain org.hibernate.SessionBuilder session builder}
+ * for creating new instances of {@link org.hibernate.Session} with
+ * certain customized options.
*
* @return The session builder
*/
@@ -456,6 +457,26 @@ default boolean containsFetchProfileDefinition(String name) {
return getDefinedFilterNames().contains( name );
}
+ /**
+ * The name assigned to this {@code SessionFactory}, if any.
+ *
+ * - When bootstrapping via JPA, this is the persistence unit name.
+ *
- Otherwise, the name may be specified by the configuration property
+ * {@value org.hibernate.cfg.PersistenceSettings#SESSION_FACTORY_NAME}.
+ *
+ *
+ * If {@value org.hibernate.cfg.PersistenceSettings#SESSION_FACTORY_NAME_IS_JNDI}
+ * is enabled, then this name is used to bind this object to JNDI, unless
+ * {@value org.hibernate.cfg.PersistenceSettings#SESSION_FACTORY_JNDI_NAME}
+ * is also specified.
+ *
+ * @see org.hibernate.cfg.PersistenceSettings#SESSION_FACTORY_NAME
+ * @see org.hibernate.cfg.PersistenceSettings#SESSION_FACTORY_NAME_IS_JNDI
+ * @see jakarta.persistence.spi.PersistenceUnitInfo#getPersistenceUnitName
+ */
+ @Override
+ String getName();
+
/**
* Get the {@linkplain SessionFactoryOptions options} used to build this factory.
*
diff --git a/hibernate-core/src/main/java/org/hibernate/boot/query/HbmResultSetMappingDescriptor.java b/hibernate-core/src/main/java/org/hibernate/boot/query/HbmResultSetMappingDescriptor.java
index f42706cc6aea..fce6703038fc 100644
--- a/hibernate-core/src/main/java/org/hibernate/boot/query/HbmResultSetMappingDescriptor.java
+++ b/hibernate-core/src/main/java/org/hibernate/boot/query/HbmResultSetMappingDescriptor.java
@@ -4,17 +4,6 @@
*/
package org.hibernate.boot.query;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.function.Supplier;
-
import org.hibernate.LockMode;
import org.hibernate.MappingException;
import org.hibernate.boot.BootLogging;
@@ -43,10 +32,9 @@
import org.hibernate.metamodel.mapping.EntityMappingType;
import org.hibernate.metamodel.mapping.PluralAttributeMapping;
import org.hibernate.persister.collection.CollectionPersister;
+import org.hibernate.query.internal.FetchMementoBasicStandard;
import org.hibernate.query.internal.FetchMementoEmbeddableStandard;
import org.hibernate.query.internal.FetchMementoEntityStandard;
-import org.hibernate.spi.NavigablePath;
-import org.hibernate.query.internal.FetchMementoBasicStandard;
import org.hibernate.query.internal.FetchMementoHbmStandard;
import org.hibernate.query.internal.FetchMementoHbmStandard.FetchParentMemento;
import org.hibernate.query.internal.NamedResultSetMappingMementoImpl;
@@ -58,11 +46,23 @@
import org.hibernate.query.named.FetchMementoBasic;
import org.hibernate.query.named.NamedResultSetMappingMemento;
import org.hibernate.query.named.ResultMemento;
+import org.hibernate.spi.NavigablePath;
import org.hibernate.sql.results.graph.Fetchable;
import org.hibernate.sql.results.graph.FetchableContainer;
import org.hibernate.sql.results.graph.entity.EntityValuedFetchable;
import org.hibernate.type.BasicType;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.function.Supplier;
+
/**
* Boot-time descriptor of a result set mapping as defined in an {@code hbm.xml} file
* either implicitly or explicitly
@@ -372,10 +372,8 @@ public ResultMemento resolve(ResultSetMappingResolutionContext resolutionContext
registrationName
);
- final EntityMappingType entityDescriptor = resolutionContext
- .getSessionFactory()
- .getRuntimeMetamodels()
- .getEntityMappingType( entityName );
+ final EntityMappingType entityDescriptor =
+ resolutionContext.getMappingMetamodel().getEntityDescriptor( entityName );
applyFetchJoins( joinDescriptorsAccess, tableAlias, propertyFetchDescriptors );
final NavigablePath entityPath = new NavigablePath( entityName );
@@ -421,10 +419,8 @@ public ResultMemento resolve(ResultSetMappingResolutionContext resolutionContext
@Override
public FetchParentMemento resolveParentMemento(ResultSetMappingResolutionContext resolutionContext) {
if ( thisAsParentMemento == null ) {
- final EntityMappingType entityDescriptor = resolutionContext
- .getSessionFactory()
- .getRuntimeMetamodels()
- .getEntityMappingType( entityName );
+ final EntityMappingType entityDescriptor =
+ resolutionContext.getMappingMetamodel().getEntityDescriptor( entityName );
thisAsParentMemento = new HbmFetchParentMemento(
new NavigablePath( entityDescriptor.getEntityName() ),
entityDescriptor
@@ -916,10 +912,9 @@ public ResultMemento resolve(ResultSetMappingResolutionContext resolutionContext
@Override
public FetchParentMemento resolveParentMemento(ResultSetMappingResolutionContext resolutionContext) {
if ( thisAsParentMemento == null ) {
- final CollectionPersister collectionDescriptor = resolutionContext.getSessionFactory()
- .getRuntimeMetamodels()
- .getMappingMetamodel()
- .getCollectionDescriptor( collectionPath.getFullPath() );
+ final CollectionPersister collectionDescriptor =
+ resolutionContext.getMappingMetamodel()
+ .getCollectionDescriptor( collectionPath.getFullPath() );
thisAsParentMemento = new HbmFetchParentMemento( collectionPath, collectionDescriptor.getAttributeMapping() );
}
@@ -957,10 +952,9 @@ public ResultMementoBasicStandard resolve(ResultSetMappingResolutionContext reso
);
if ( hibernateTypeName != null ) {
- final BasicType> namedType = resolutionContext.getSessionFactory()
- .getTypeConfiguration()
- .getBasicTypeRegistry()
- .getRegisteredType( hibernateTypeName );
+ final BasicType> namedType =
+ resolutionContext.getTypeConfiguration().getBasicTypeRegistry()
+ .getRegisteredType( hibernateTypeName );
if ( namedType == null ) {
throw new IllegalArgumentException( "Could not resolve named type : " + hibernateTypeName );
diff --git a/hibernate-core/src/main/java/org/hibernate/boot/query/SqlResultSetMappingDescriptor.java b/hibernate-core/src/main/java/org/hibernate/boot/query/SqlResultSetMappingDescriptor.java
index 35e0fa75cbe6..d22955481911 100644
--- a/hibernate-core/src/main/java/org/hibernate/boot/query/SqlResultSetMappingDescriptor.java
+++ b/hibernate-core/src/main/java/org/hibernate/boot/query/SqlResultSetMappingDescriptor.java
@@ -12,10 +12,8 @@
import org.hibernate.LockMode;
import org.hibernate.MappingException;
-import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.internal.util.StringHelper;
import org.hibernate.internal.util.collections.ArrayHelper;
-import org.hibernate.metamodel.RuntimeMetamodels;
import org.hibernate.metamodel.mapping.BasicValuedModelPart;
import org.hibernate.metamodel.mapping.EntityDiscriminatorMapping;
import org.hibernate.metamodel.mapping.EntityMappingType;
@@ -214,10 +212,9 @@ public ResultMemento resolve(ResultSetMappingResolutionContext resolutionContext
(mapping) -> argumentResultMementos.add( mapping.resolve( resolutionContext ) )
);
- final SessionFactoryImplementor sessionFactory = resolutionContext.getSessionFactory();
- final JavaType> targetJtd = sessionFactory.getTypeConfiguration()
- .getJavaTypeRegistry()
- .getDescriptor( targetJavaType );
+ final JavaType> targetJtd =
+ resolutionContext.getTypeConfiguration().getJavaTypeRegistry()
+ .getDescriptor( targetJavaType );
return new ResultMementoInstantiationStandard( targetJtd, argumentResultMementos );
}
@@ -270,8 +267,8 @@ private static Map extractFetchMappings(
@Override
public ResultMemento resolve(ResultSetMappingResolutionContext resolutionContext) {
- final RuntimeMetamodels runtimeMetamodels = resolutionContext.getSessionFactory().getRuntimeMetamodels();
- final EntityMappingType entityDescriptor = runtimeMetamodels.getEntityMappingType( entityName );
+ final EntityMappingType entityDescriptor =
+ resolutionContext.getMappingMetamodel().getEntityDescriptor( entityName );
final FetchMementoBasic discriminatorMemento = resolveDiscriminatorMemento(
entityDescriptor,
@@ -366,8 +363,8 @@ private void addColumn(FieldResult fieldResult) {
@Override
public ResultMemento asResultMemento(NavigablePath path, ResultSetMappingResolutionContext resolutionContext) {
- final RuntimeMetamodels runtimeMetamodels = resolutionContext.getSessionFactory().getRuntimeMetamodels();
- final EntityMappingType entityMapping = runtimeMetamodels.getEntityMappingType( entityName );
+ final EntityMappingType entityMapping =
+ resolutionContext.getMappingMetamodel().getEntityDescriptor( entityName );
final ModelPart subPart = entityMapping.findSubPart( propertyPath, null );
@@ -386,8 +383,8 @@ public ResultMemento asResultMemento(NavigablePath path, ResultSetMappingResolut
@Override
public FetchMemento resolve(ResultSetMappingResolutionContext resolutionContext) {
- final RuntimeMetamodels runtimeMetamodels = resolutionContext.getSessionFactory().getRuntimeMetamodels();
- final EntityMappingType entityMapping = runtimeMetamodels.getEntityMappingType( entityName );
+ final EntityMappingType entityMapping =
+ resolutionContext.getMappingMetamodel().getEntityDescriptor( entityName );
ModelPart subPart = entityMapping.findSubPart(
propertyPathParts[0],
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/AggregateWindowEmulationQueryTransformer.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/AggregateWindowEmulationQueryTransformer.java
index 46fec75ff6e2..40e337201429 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/AggregateWindowEmulationQueryTransformer.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/AggregateWindowEmulationQueryTransformer.java
@@ -10,7 +10,6 @@
import java.util.List;
import java.util.Map;
-import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.metamodel.mapping.BasicValuedMapping;
import org.hibernate.metamodel.mapping.JdbcMapping;
import org.hibernate.metamodel.model.domain.ReturnableType;
@@ -92,8 +91,6 @@ public QuerySpec transform(
CteContainer cteContainer,
QuerySpec querySpec,
SqmToSqlAstConverter converter) {
- final SessionFactoryImplementor factory = converter.getCreationContext()
- .getSessionFactory();
final QuerySpec outerQuerySpec = new QuerySpec( querySpec.isRoot() );
final String identifierVariable = "hhh_";
final NavigablePath navigablePath = new NavigablePath(
@@ -400,7 +397,7 @@ protected X replaceExpression(X expression) {
columnNames,
false,
true,
- factory
+ converter.getCreationContext().getSessionFactory()
);
outerQuerySpec.getFromClause().addRoot( queryPartTableGroup );
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/AvgFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/AvgFunction.java
index 53bbd24d2dce..3c63a4236203 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/AvgFunction.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/AvgFunction.java
@@ -14,6 +14,7 @@
import org.hibernate.metamodel.mapping.JdbcMapping;
import org.hibernate.metamodel.model.domain.DomainType;
import org.hibernate.metamodel.model.domain.ReturnableType;
+import org.hibernate.query.BindingContext;
import org.hibernate.query.sqm.SqmExpressible;
import org.hibernate.query.sqm.function.AbstractSqmSelfRenderingFunctionDescriptor;
import org.hibernate.query.sqm.function.FunctionKind;
@@ -150,7 +151,7 @@ public static class Validator implements ArgumentsValidator {
public void validate(
List extends SqmTypedNode>> arguments,
String functionName,
- TypeConfiguration typeConfiguration) {
+ BindingContext bindingContext) {
if ( arguments.size() != 1 ) {
throw new FunctionArgumentException(
String.format(
@@ -166,7 +167,7 @@ public void validate(
final SqmExpressible> expressible = argument.getExpressible();
final DomainType> domainType;
if ( expressible != null && ( domainType = expressible.getSqmType() ) != null ) {
- final JdbcType jdbcType = getJdbcType( domainType, typeConfiguration );
+ final JdbcType jdbcType = getJdbcType( domainType, bindingContext.getTypeConfiguration() );
if ( !isNumeric( jdbcType ) ) {
throw new FunctionArgumentException(
String.format(
@@ -230,7 +231,8 @@ public BasicValuedMapping resolveFunctionReturnType(
if ( impliedType != null ) {
return impliedType;
}
- final JdbcMapping jdbcMapping = ( (Expression) arguments.get( 0 ) ).getExpressionType().getSingleJdbcMapping();
+ Expression expression = (Expression) arguments.get( 0 );
+ final JdbcMapping jdbcMapping = expression.getExpressionType().getSingleJdbcMapping();
if ( jdbcMapping instanceof BasicPluralType, ?> ) {
return (BasicValuedMapping) jdbcMapping;
}
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/ChrLiteralEmulation.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/ChrLiteralEmulation.java
index b96ac79dd482..4ebb099ca232 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/ChrLiteralEmulation.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/ChrLiteralEmulation.java
@@ -9,6 +9,7 @@
import org.hibernate.QueryException;
import org.hibernate.metamodel.model.domain.ReturnableType;
+import org.hibernate.query.BindingContext;
import org.hibernate.query.sqm.function.AbstractSqmSelfRenderingFunctionDescriptor;
import org.hibernate.query.sqm.produce.function.ArgumentTypesValidator;
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
@@ -41,7 +42,7 @@ public ChrLiteralEmulation(TypeConfiguration typeConfiguration) {
StandardArgumentsValidators.exactly(1),
new ArgumentsValidator() {
@Override
- public void validate(List extends SqmTypedNode>> arguments, String functionName, TypeConfiguration typeConfiguration) {
+ public void validate(List extends SqmTypedNode>> arguments, String functionName, BindingContext bindingContext) {
if ( !( arguments.get( 0 ) instanceof SqmLiteral> ) ) {
throw new QueryException(
String.format(
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/CteGenerateSeriesFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/CteGenerateSeriesFunction.java
index bff57bf50abc..4f474e23c6d7 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/CteGenerateSeriesFunction.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/CteGenerateSeriesFunction.java
@@ -150,8 +150,9 @@ protected CteStatement createSeriesCte(SqmToSqlAstConverter converter) {
}
public static CteStatement createSeriesCte(int maxSeriesSize, SqmToSqlAstConverter converter) {
- final BasicType longType = converter.getCreationContext().getTypeConfiguration()
- .getBasicTypeForJavaType( Long.class );
+ final BasicType longType =
+ converter.getCreationContext().getTypeConfiguration()
+ .getBasicTypeForJavaType( Long.class );
final Expression one = new UnparsedNumericLiteral<>( "1", NumericTypeCategory.LONG, longType );
final List cteColumns = List.of( new CteColumn( "i", longType ) );
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/DynamicDispatchFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/DynamicDispatchFunction.java
index 67a249d53625..fd5a5de58f6b 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/DynamicDispatchFunction.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/DynamicDispatchFunction.java
@@ -7,6 +7,7 @@
import java.util.List;
import org.hibernate.metamodel.model.domain.ReturnableType;
+import org.hibernate.query.BindingContext;
import org.hibernate.query.spi.QueryEngine;
import org.hibernate.query.sqm.function.FunctionKind;
import org.hibernate.query.sqm.function.SelfRenderingSqmFunction;
@@ -16,7 +17,6 @@
import org.hibernate.query.sqm.tree.SqmTypedNode;
import org.hibernate.query.sqm.tree.predicate.SqmPredicate;
import org.hibernate.query.sqm.tree.select.SqmOrderByClause;
-import org.hibernate.type.spi.TypeConfiguration;
/**
* A function that dynamically dispatches to other functions,
@@ -61,10 +61,7 @@ public SelfRenderingSqmFunction generateSqmExpression(
List extends SqmTypedNode>> arguments,
ReturnableType impliedResultType,
QueryEngine queryEngine) {
- final SqmFunctionDescriptor functionDescriptor = validateGetFunction(
- arguments,
- queryEngine.getTypeConfiguration()
- );
+ final SqmFunctionDescriptor functionDescriptor = validateGetFunction( arguments, queryEngine );
return functionDescriptor.generateSqmExpression( arguments, impliedResultType, queryEngine );
}
@@ -74,10 +71,7 @@ public SelfRenderingSqmFunction generateAggregateSqmExpression(
SqmPredicate filter,
ReturnableType impliedResultType,
QueryEngine queryEngine) {
- final SqmFunctionDescriptor functionDescriptor = validateGetFunction(
- arguments,
- queryEngine.getTypeConfiguration()
- );
+ final SqmFunctionDescriptor functionDescriptor = validateGetFunction( arguments, queryEngine );
return functionDescriptor.generateAggregateSqmExpression(
arguments,
filter,
@@ -93,10 +87,7 @@ public SelfRenderingSqmFunction generateOrderedSetAggregateSqmExpression(
SqmOrderByClause withinGroupClause,
ReturnableType impliedResultType,
QueryEngine queryEngine) {
- final SqmFunctionDescriptor functionDescriptor = validateGetFunction(
- arguments,
- queryEngine.getTypeConfiguration()
- );
+ final SqmFunctionDescriptor functionDescriptor = validateGetFunction( arguments, queryEngine );
return functionDescriptor.generateOrderedSetAggregateSqmExpression(
arguments,
filter,
@@ -114,10 +105,7 @@ public SelfRenderingSqmFunction generateWindowSqmExpression(
Boolean fromFirst,
ReturnableType impliedResultType,
QueryEngine queryEngine) {
- final SqmFunctionDescriptor functionDescriptor = validateGetFunction(
- arguments,
- queryEngine.getTypeConfiguration()
- );
+ final SqmFunctionDescriptor functionDescriptor = validateGetFunction( arguments, queryEngine );
return functionDescriptor.generateWindowSqmExpression(
arguments,
filter,
@@ -137,13 +125,13 @@ public ArgumentsValidator getArgumentsValidator() {
public void validate(
List extends SqmTypedNode>> arguments,
String functionName,
- TypeConfiguration typeConfiguration) {
- validateGetFunction( arguments, typeConfiguration );
+ BindingContext bindingContext) {
+ validateGetFunction( arguments, bindingContext );
}
private SqmFunctionDescriptor validateGetFunction(
List extends SqmTypedNode>> arguments,
- TypeConfiguration typeConfiguration) {
+ BindingContext bindingContext) {
RuntimeException exception = null;
for ( String overload : functionNames ) {
final SqmFunctionDescriptor functionDescriptor = functionRegistry.findFunctionDescriptor( overload );
@@ -151,7 +139,7 @@ private SqmFunctionDescriptor validateGetFunction(
throw new IllegalArgumentException( "No function registered under the name '" + overload + "'" );
}
try {
- functionDescriptor.getArgumentsValidator().validate( arguments, overload, typeConfiguration );
+ functionDescriptor.getArgumentsValidator().validate( arguments, overload, bindingContext );
return functionDescriptor;
}
catch (RuntimeException ex) {
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/FormatFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/FormatFunction.java
index aab2081c658b..e200e4cc3e2b 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/FormatFunction.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/FormatFunction.java
@@ -221,9 +221,7 @@ public Expression convertToSqlAst(SqmToSqlAstConverter walker) {
final FunctionRenderer substringFunction = getFunction( walker, "substring", 3 );
final BasicType stringType = typeConfiguration.getBasicTypeRegistry()
.resolve( StandardBasicTypes.STRING );
- final Dialect dialect =
- walker.getCreationContext().getSessionFactory().getJdbcServices()
- .getDialect();
+ final Dialect dialect = walker.getCreationContext().getDialect();
Expression formatExpression = null;
final StringBuilder sb = new StringBuilder();
final StringBuilderSqlAppender sqlAppender = new StringBuilderSqlAppender( sb );
@@ -425,13 +423,12 @@ public Expression convertToSqlAst(SqmToSqlAstConverter walker) {
private FunctionRenderer getFunction(SqmToSqlAstConverter walker, String name) {
return (FunctionRenderer)
- walker.getCreationContext().getSessionFactory().getQueryEngine()
- .getSqmFunctionRegistry().findFunctionDescriptor( name );
+ walker.getCreationContext().getSqmFunctionRegistry().findFunctionDescriptor( name );
}
private FunctionRenderer getFunction(SqmToSqlAstConverter walker, String name, int argumentCount) {
final SqmFunctionDescriptor functionDescriptor =
- walker.getCreationContext().getSessionFactory().getQueryEngine().getSqmFunctionRegistry()
+ walker.getCreationContext().getSqmFunctionRegistry()
.findFunctionDescriptor( name );
if ( functionDescriptor instanceof MultipatternSqmFunctionDescriptor multipatternSqmFunctionDescriptor ) {
return (FunctionRenderer) multipatternSqmFunctionDescriptor.getFunction( argumentCount );
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/GenerateSeriesArgumentValidator.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/GenerateSeriesArgumentValidator.java
index 5cf39b3d8e7d..5163b7563beb 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/GenerateSeriesArgumentValidator.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/GenerateSeriesArgumentValidator.java
@@ -6,13 +6,13 @@
import org.hibernate.metamodel.mapping.JdbcMapping;
import org.hibernate.metamodel.model.domain.DomainType;
+import org.hibernate.query.BindingContext;
import org.hibernate.query.sqm.SqmExpressible;
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
import org.hibernate.query.sqm.produce.function.FunctionArgumentException;
import org.hibernate.query.sqm.produce.function.StandardArgumentsValidators;
import org.hibernate.query.sqm.tree.SqmTypedNode;
import org.hibernate.type.descriptor.jdbc.JdbcType;
-import org.hibernate.type.spi.TypeConfiguration;
import java.util.List;
import java.util.Locale;
@@ -32,8 +32,8 @@ public GenerateSeriesArgumentValidator() {
public void validate(
List extends SqmTypedNode>> arguments,
String functionName,
- TypeConfiguration typeConfiguration) {
- delegate.validate( arguments, functionName, typeConfiguration );
+ BindingContext bindingContext) {
+ delegate.validate( arguments, functionName, bindingContext );
final SqmTypedNode> start = arguments.get( 0 );
final SqmTypedNode> stop = arguments.get( 1 );
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/InverseDistributionFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/InverseDistributionFunction.java
index edffe43cf4c6..764d5e52dd3b 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/InverseDistributionFunction.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/InverseDistributionFunction.java
@@ -189,7 +189,7 @@ protected MappingModelExpressible> getMappingModelExpressible(
return basicValuedMapping;
}
try {
- return walker.getCreationContext().getSessionFactory().getMappingMetamodel()
+ return walker.getCreationContext().getMappingMetamodel()
.resolveMappingExpressible( getNodeType(), walker.getFromClauseAccess()::getTableGroup );
}
catch (Exception e) {
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/NumberSeriesGenerateSeriesFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/NumberSeriesGenerateSeriesFunction.java
index d5070882852a..0209a93dd290 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/NumberSeriesGenerateSeriesFunction.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/NumberSeriesGenerateSeriesFunction.java
@@ -5,7 +5,6 @@
package org.hibernate.dialect.function;
import org.checkerframework.checker.nullness.qual.Nullable;
-import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.internal.util.NullnessHelper;
import org.hibernate.metamodel.mapping.BasicValuedMapping;
import org.hibernate.metamodel.mapping.CollectionPart;
@@ -28,6 +27,7 @@
import org.hibernate.sql.Template;
import org.hibernate.sql.ast.SqlAstTranslator;
import org.hibernate.sql.ast.spi.SqlAppender;
+import org.hibernate.sql.ast.spi.SqlAstCreationContext;
import org.hibernate.sql.ast.tree.SqlAstNode;
import org.hibernate.sql.ast.tree.cte.CteContainer;
import org.hibernate.sql.ast.tree.expression.BinaryArithmeticExpression;
@@ -107,8 +107,8 @@ protected static boolean needsVariable(Expression expression) {
public static Expression add(Expression left, Expression right, SqmToSqlAstConverter converter) {
if ( right instanceof org.hibernate.sql.ast.tree.expression.Duration duration ) {
final BasicType> nodeType = (BasicType>) left.getExpressionType().getSingleJdbcMapping();
- final FunctionRenderer timestampadd = (FunctionRenderer) converter.getCreationContext().getSessionFactory()
- .getQueryEngine().getSqmFunctionRegistry().findFunctionDescriptor( "timestampadd" );
+ final FunctionRenderer timestampadd = (FunctionRenderer) converter.getCreationContext()
+ .getSqmFunctionRegistry().findFunctionDescriptor( "timestampadd" );
return new SelfRenderingFunctionSqlAstExpression(
"timestampadd",
timestampadd,
@@ -155,10 +155,11 @@ public static Expression multiply(Expression left, Expression multiplier) {
static Expression castToTimestamp(SqlAstNode node, SqmToSqlAstConverter converter) {
final BasicType> nodeType = (BasicType>) ((Expression) node).getExpressionType().getSingleJdbcMapping();
- final FunctionRenderer cast = (FunctionRenderer) converter.getCreationContext().getSessionFactory().getQueryEngine()
- .getSqmFunctionRegistry().findFunctionDescriptor( "cast" );
- final BasicType> timestampType = converter.getCreationContext().getTypeConfiguration()
- .getBasicTypeForJavaType( Timestamp.class );
+ final FunctionRenderer cast = (FunctionRenderer)
+ converter.getCreationContext().getSqmFunctionRegistry().findFunctionDescriptor( "cast" );
+ final BasicType> timestampType =
+ converter.getCreationContext().getTypeConfiguration()
+ .getBasicTypeForJavaType( Timestamp.class );
return new SelfRenderingFunctionSqlAstExpression(
"cast",
cast,
@@ -211,8 +212,7 @@ public QuerySpec transform(CteContainer cteContainer, QuerySpec querySpec, SqmTo
else {
predicateContainer = querySpec;
}
- final BasicType integerType = converter.getCreationContext()
- .getSessionFactory()
+ final BasicType integerType = converter.getSqmCreationContext()
.getNodeBuilder()
.getIntegerType();
final Expression oneBasedOrdinal = new ColumnReference(
@@ -247,8 +247,7 @@ public QuerySpec transform(CteContainer cteContainer, QuerySpec querySpec, SqmTo
}
else {
// When start < stop, step must be positive and value is only valid if it's less than or equal to stop
- final BasicType booleanType = converter.getCreationContext()
- .getSessionFactory()
+ final BasicType booleanType = converter.getSqmCreationContext()
.getNodeBuilder()
.getBooleanType();
final Predicate positiveProgress = new Junction(
@@ -438,8 +437,10 @@ protected SelectableMapping[] resolveIterationVariableBasedFunctionReturnType(
}
private static String timestampadd(String startExpression, String stepExpression, JdbcMapping type, org.hibernate.sql.ast.tree.expression.Duration duration, SqmToSqlAstConverter converter) {
- final FunctionRenderer renderer = (FunctionRenderer) converter.getCreationContext().getSessionFactory()
- .getQueryEngine().getSqmFunctionRegistry().findFunctionDescriptor( "timestampadd" );
+ final SqlAstCreationContext creationContext = converter.getCreationContext();
+
+ final FunctionRenderer renderer = (FunctionRenderer) creationContext.getSqmFunctionRegistry()
+ .findFunctionDescriptor( "timestampadd" );
final QuerySpec fakeQuery = new QuerySpec( true );
fakeQuery.getSelectClause().addSqlSelection( new SqlSelectionImpl(
new SelfRenderingFunctionSqlAstExpression(
@@ -454,9 +455,9 @@ private static String timestampadd(String startExpression, String stepExpression
type
)
) );
- final SqlAstTranslator translator = converter.getCreationContext()
- .getSessionFactory().getJdbcServices().getDialect().getSqlAstTranslatorFactory()
- .buildSelectTranslator( converter.getCreationContext().getSessionFactory(), new SelectStatement( fakeQuery ) );
+ final SqlAstTranslator translator =
+ creationContext.getDialect().getSqlAstTranslatorFactory()
+ .buildSelectTranslator( creationContext.getSessionFactory(), new SelectStatement( fakeQuery ) );
final JdbcOperationQuerySelect operation = translator.translate( null, QueryOptions.NONE );
final String sqlString = operation.getSqlString();
assert sqlString.startsWith( "select " );
@@ -483,11 +484,11 @@ private String getStepExpression(@Nullable Expression explicitStep, String table
private String getExpression(Expression expression, String tableIdentifierVariable, String syntheticColumnName, SqmToSqlAstConverter walker) {
if ( expression instanceof Literal literal ) {
- final SessionFactoryImplementor sessionFactory = walker.getCreationContext().getSessionFactory();
//noinspection unchecked
+ final SqlAstCreationContext creationContext = walker.getCreationContext();
return literal.getJdbcMapping().getJdbcLiteralFormatter()
- .toJdbcLiteral( literal.getLiteralValue(), sessionFactory.getJdbcServices().getDialect(),
- sessionFactory.getWrapperOptions() );
+ .toJdbcLiteral( literal.getLiteralValue(), creationContext.getDialect(),
+ creationContext.getWrapperOptions() );
}
else if ( expression instanceof ColumnReference columnReference ) {
return columnReference.getExpressionText();
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/TruncFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/TruncFunction.java
index 5ce4fbd51f2e..386fafd88a00 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/TruncFunction.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/TruncFunction.java
@@ -8,6 +8,7 @@
import java.util.List;
import org.hibernate.metamodel.model.domain.ReturnableType;
+import org.hibernate.query.BindingContext;
import org.hibernate.query.spi.QueryEngine;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.common.TemporalUnit;
@@ -215,12 +216,12 @@ protected static class TruncArgumentsValidator implements ArgumentsValidator {
public void validate(
List extends SqmTypedNode>> arguments,
String functionName,
- TypeConfiguration typeConfiguration) {
+ BindingContext bindingContext) {
if ( arguments.size() == 2 && arguments.get( 1 ) instanceof SqmExtractUnit ) {
- DATETIME_VALIDATOR.validate( arguments, functionName, typeConfiguration );
+ DATETIME_VALIDATOR.validate( arguments, functionName, bindingContext );
}
else {
- NUMERIC_VALIDATOR.validate( arguments, functionName, typeConfiguration );
+ NUMERIC_VALIDATOR.validate( arguments, functionName, bindingContext );
}
}
}
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/AbstractArrayFillFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/AbstractArrayFillFunction.java
index 9621b32e0cbf..46b20a4789eb 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/AbstractArrayFillFunction.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/AbstractArrayFillFunction.java
@@ -55,7 +55,7 @@ private ArrayFillArgumentsValidator() {
: null;
}
else {
- return converter.getCreationContext().getSessionFactory().getTypeConfiguration().getBasicTypeRegistry()
+ return converter.getCreationContext().getTypeConfiguration().getBasicTypeRegistry()
.getRegisteredType( Integer.class );
}
}
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/AbstractArrayPositionFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/AbstractArrayPositionFunction.java
index 2313b4aba2c8..f26abb6af629 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/AbstractArrayPositionFunction.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/AbstractArrayPositionFunction.java
@@ -42,7 +42,6 @@ public AbstractArrayPositionFunction(TypeConfiguration typeConfiguration) {
public @Nullable MappingModelExpressible> resolveFunctionArgumentType(List extends SqmTypedNode>> arguments, int argumentIndex, SqmToSqlAstConverter converter) {
if ( argumentIndex == 2 ) {
return converter.getCreationContext()
- .getSessionFactory()
.getTypeConfiguration()
.standardBasicTypeForJavaType( Integer.class );
}
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayAndElementArgumentTypeResolver.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayAndElementArgumentTypeResolver.java
index 8ce0d89e9cf1..d9622056cfb6 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayAndElementArgumentTypeResolver.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayAndElementArgumentTypeResolver.java
@@ -43,7 +43,7 @@ public ArrayAndElementArgumentTypeResolver(int arrayIndex, int... elementIndexes
if ( expressible != null ) {
return DdlTypeHelper.resolveArrayType(
(DomainType>) expressible.getSingleJdbcMapping(),
- converter.getCreationContext().getSessionFactory().getTypeConfiguration()
+ converter.getCreationContext().getTypeConfiguration()
);
}
}
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayAndElementArgumentValidator.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayAndElementArgumentValidator.java
index 98c2f76e5950..5dd439b21249 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayAndElementArgumentValidator.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayAndElementArgumentValidator.java
@@ -6,12 +6,12 @@
import java.util.List;
+import org.hibernate.query.BindingContext;
import org.hibernate.query.sqm.SqmExpressible;
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
import org.hibernate.query.sqm.produce.function.FunctionArgumentException;
import org.hibernate.query.sqm.tree.SqmTypedNode;
import org.hibernate.type.BasicType;
-import org.hibernate.type.spi.TypeConfiguration;
/**
* A {@link ArgumentsValidator} that validates the array type is compatible with the element type.
@@ -31,8 +31,8 @@ public ArrayAndElementArgumentValidator(int arrayIndex, int... elementIndexes) {
public void validate(
List extends SqmTypedNode>> arguments,
String functionName,
- TypeConfiguration typeConfiguration) {
- final BasicType> expectedElementType = getElementType( arguments, functionName, typeConfiguration );
+ BindingContext bindingContext) {
+ final BasicType> expectedElementType = getElementType( arguments, functionName, bindingContext );
for ( int elementIndex : elementIndexes ) {
if ( elementIndex < arguments.size() ) {
final SqmTypedNode> elementArgument = arguments.get( elementIndex );
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayArgumentValidator.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayArgumentValidator.java
index 7d978b2bed8f..34b8965f631d 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayArgumentValidator.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayArgumentValidator.java
@@ -6,13 +6,13 @@
import java.util.List;
+import org.hibernate.query.BindingContext;
import org.hibernate.query.sqm.SqmExpressible;
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
import org.hibernate.query.sqm.produce.function.FunctionArgumentException;
import org.hibernate.query.sqm.tree.SqmTypedNode;
import org.hibernate.type.BasicPluralType;
import org.hibernate.type.BasicType;
-import org.hibernate.type.spi.TypeConfiguration;
/**
* A {@link ArgumentsValidator} that validates the array type is compatible with the element type.
@@ -31,22 +31,22 @@ public ArrayArgumentValidator(int arrayIndex) {
public void validate(
List extends SqmTypedNode>> arguments,
String functionName,
- TypeConfiguration typeConfiguration) {
- getElementType( arguments, functionName, typeConfiguration );
+ BindingContext bindingContext) {
+ getElementType( arguments, functionName, bindingContext );
}
protected BasicType> getElementType(
List extends SqmTypedNode>> arguments,
String functionName,
- TypeConfiguration typeConfiguration) {
- return getElementType( arrayIndex, arguments, functionName, typeConfiguration );
+ BindingContext bindingContext) {
+ return getElementType( arrayIndex, arguments, functionName, bindingContext );
}
protected BasicPluralType, ?> getPluralType(
int arrayIndex,
List extends SqmTypedNode>> arguments,
String functionName,
- TypeConfiguration typeConfiguration) {
+ BindingContext bindingContext) {
final SqmTypedNode> arrayArgument = arguments.get( arrayIndex );
final SqmExpressible> expressible = arrayArgument.getExpressible();
if ( expressible == null ) {
@@ -75,7 +75,7 @@ protected BasicType> getElementType(
int arrayIndex,
List extends SqmTypedNode>> arguments,
String functionName,
- TypeConfiguration typeConfiguration) {
- return getPluralType( arrayIndex, arguments, functionName, typeConfiguration ).getElementType();
+ BindingContext bindingContext) {
+ return getPluralType( arrayIndex, arguments, functionName, bindingContext ).getElementType();
}
}
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayConstructorFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayConstructorFunction.java
index 4185315608c9..95bc8be3b91c 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayConstructorFunction.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayConstructorFunction.java
@@ -6,12 +6,11 @@
import java.util.List;
-import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.metamodel.mapping.JdbcMappingContainer;
import org.hibernate.metamodel.model.domain.ReturnableType;
+import org.hibernate.query.BindingContext;
import org.hibernate.query.sqm.SqmExpressible;
import org.hibernate.query.sqm.function.AbstractSqmSelfRenderingFunctionDescriptor;
-import org.hibernate.query.sqm.internal.TypecheckUtil;
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
import org.hibernate.query.sqm.produce.function.FunctionArgumentException;
import org.hibernate.query.sqm.produce.function.StandardFunctionArgumentTypeResolvers;
@@ -21,7 +20,8 @@
import org.hibernate.sql.ast.tree.SqlAstNode;
import org.hibernate.sql.ast.tree.expression.Expression;
import org.hibernate.type.BottomType;
-import org.hibernate.type.spi.TypeConfiguration;
+
+import static org.hibernate.query.sqm.internal.TypecheckUtil.areTypesComparable;
public class ArrayConstructorFunction extends AbstractSqmSelfRenderingFunctionDescriptor {
@@ -75,8 +75,7 @@ private ArrayConstructorArgumentsValidator() {
public void validate(
List extends SqmTypedNode>> arguments,
String functionName,
- TypeConfiguration typeConfiguration) {
- final SessionFactoryImplementor sessionFactory = typeConfiguration.getSessionFactory();
+ BindingContext bindingContext) {
final int size = arguments.size();
SqmExpressible> firstType = null;
for ( int i = 0; i < size; i++ ) {
@@ -84,7 +83,7 @@ public void validate(
if ( firstType == null ) {
firstType = argument;
}
- else if ( !TypecheckUtil.areTypesComparable( firstType, argument, sessionFactory ) ) {
+ else if ( !areTypesComparable( firstType, argument, bindingContext ) ) {
throw new FunctionArgumentException(
String.format(
"All array arguments must have a compatible type compatible to the first argument type [%s], but argument %d has type '%s'",
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayContainsArgumentTypeResolver.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayContainsArgumentTypeResolver.java
index feb0fb02b685..56a6975158c2 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayContainsArgumentTypeResolver.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayContainsArgumentTypeResolver.java
@@ -36,7 +36,7 @@ public class ArrayContainsArgumentTypeResolver extends AbstractFunctionArgumentT
else {
return DdlTypeHelper.resolveArrayType(
(DomainType>) expressible.getSingleJdbcMapping(),
- converter.getCreationContext().getSessionFactory().getTypeConfiguration()
+ converter.getCreationContext().getTypeConfiguration()
);
}
}
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayContainsArgumentValidator.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayContainsArgumentValidator.java
index 702448fd8172..0b98802d410b 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayContainsArgumentValidator.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayContainsArgumentValidator.java
@@ -6,12 +6,12 @@
import java.util.List;
+import org.hibernate.query.BindingContext;
import org.hibernate.query.sqm.SqmExpressible;
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
import org.hibernate.query.sqm.produce.function.FunctionArgumentException;
import org.hibernate.query.sqm.tree.SqmTypedNode;
import org.hibernate.type.BasicPluralType;
-import org.hibernate.type.spi.TypeConfiguration;
/**
* A {@link ArgumentsValidator} that validates the arguments for the {@code array_contains} function.
@@ -28,9 +28,9 @@ protected ArrayContainsArgumentValidator() {
public void validate(
List extends SqmTypedNode>> arguments,
String functionName,
- TypeConfiguration typeConfiguration) {
+ BindingContext bindingContext) {
final BasicPluralType, ?> haystackType =
- getPluralType( 0, arguments, functionName, typeConfiguration );
+ getPluralType( 0, arguments, functionName, bindingContext );
final SqmExpressible> expressible = arguments.get( 1 ).getExpressible();
final SqmExpressible> needleType = expressible == null ? null : expressible.getSqmType();
if ( haystackType!= null && needleType != null
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayIncludesArgumentValidator.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayIncludesArgumentValidator.java
index d7e510fd8ebb..2592f955c5b3 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayIncludesArgumentValidator.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayIncludesArgumentValidator.java
@@ -6,11 +6,11 @@
import java.util.List;
+import org.hibernate.query.BindingContext;
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
import org.hibernate.query.sqm.produce.function.FunctionArgumentException;
import org.hibernate.query.sqm.tree.SqmTypedNode;
import org.hibernate.type.BasicPluralType;
-import org.hibernate.type.spi.TypeConfiguration;
/**
* A {@link ArgumentsValidator} that validates the arguments for the {@code array_includes} function.
@@ -27,11 +27,11 @@ protected ArrayIncludesArgumentValidator() {
public void validate(
List extends SqmTypedNode>> arguments,
String functionName,
- TypeConfiguration typeConfiguration) {
+ BindingContext bindingContext) {
final BasicPluralType, ?> haystackType =
- getPluralType( 0, arguments, functionName, typeConfiguration );
+ getPluralType( 0, arguments, functionName, bindingContext );
final BasicPluralType, ?> needleType =
- getPluralType( 1, arguments, functionName, typeConfiguration );
+ getPluralType( 1, arguments, functionName, bindingContext );
if ( haystackType != null && needleType != null
&& !haystackType.equals( needleType )
&& !haystackType.getElementType().equals( needleType ) ) {
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArraysOfSameTypeArgumentValidator.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArraysOfSameTypeArgumentValidator.java
index b402b4e02cfb..f723d334190d 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArraysOfSameTypeArgumentValidator.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArraysOfSameTypeArgumentValidator.java
@@ -8,12 +8,12 @@
import java.util.Objects;
import org.hibernate.metamodel.model.domain.DomainType;
+import org.hibernate.query.BindingContext;
import org.hibernate.query.sqm.SqmExpressible;
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
import org.hibernate.query.sqm.produce.function.FunctionArgumentException;
import org.hibernate.query.sqm.tree.SqmTypedNode;
import org.hibernate.type.BasicPluralType;
-import org.hibernate.type.spi.TypeConfiguration;
/**
* A {@link ArgumentsValidator} that validates all arguments are of the same array type.
@@ -26,7 +26,7 @@ public class ArraysOfSameTypeArgumentValidator implements ArgumentsValidator {
public void validate(
List extends SqmTypedNode>> arguments,
String functionName,
- TypeConfiguration typeConfiguration) {
+ BindingContext bindingContext) {
BasicPluralType, ?> arrayType = null;
for ( int i = 0; i < arguments.size(); i++ ) {
final SqmExpressible> expressible = arguments.get( i ).getExpressible();
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/H2UnnestFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/H2UnnestFunction.java
index 60d7c0d1c88f..f83fd2148e92 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/H2UnnestFunction.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/H2UnnestFunction.java
@@ -109,8 +109,7 @@ public TableGroup convertToSqlAst(
tg -> tg.findTableGroupJoin( functionTableGroup ) == null ? null : tg
);
final TableGroupJoin join = parentTableGroup.findTableGroupJoin( functionTableGroup );
- final BasicType integerType = walker.getCreationContext()
- .getSessionFactory()
+ final BasicType integerType = walker.getSqmCreationContext()
.getNodeBuilder()
.getIntegerType();
final Expression lhs = new SelfRenderingExpression() {
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/json/H2JsonTableFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/json/H2JsonTableFunction.java
index b26fa504ba6e..745b6632e625 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/json/H2JsonTableFunction.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/json/H2JsonTableFunction.java
@@ -60,10 +60,11 @@
import org.hibernate.type.spi.TypeConfiguration;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import java.util.Set;
+import static java.util.Collections.emptyList;
+
/**
* H2 json_table function.
@@ -161,8 +162,7 @@ public QuerySpec transform(CteContainer cteContainer, QuerySpec querySpec, SqmTo
else {
predicateContainer = querySpec;
}
- final BasicType integerType = converter.getCreationContext()
- .getSessionFactory()
+ final BasicType integerType = converter.getSqmCreationContext()
.getNodeBuilder()
.getIntegerType();
final Expression jsonDocument;
@@ -221,20 +221,19 @@ public QuerySpec transform(CteContainer cteContainer, QuerySpec querySpec, SqmTo
maximumArraySize,
lastArrayIndex
),
- Collections.emptyList(),
+ emptyList(),
null,
null
),
tableIdentifierVariable + "_synthetic_",
- Collections.emptyList(),
+ emptyList(),
Set.of( "" ),
false,
false,
true,
converter.getCreationContext().getSessionFactory()
);
- final BasicType integerType = converter.getCreationContext()
- .getSessionFactory()
+ final BasicType integerType = converter.getSqmCreationContext()
.getNodeBuilder()
.getIntegerType();
@@ -751,8 +750,8 @@ private String castValueExpression(String baseReadExpression, CastTarget castTar
//noinspection unchecked
final String sqlLiteral = defaultExpression.getJdbcMapping().getJdbcLiteralFormatter().toJdbcLiteral(
defaultExpression.getLiteralValue(),
- converter.getCreationContext().getSessionFactory().getJdbcServices().getDialect(),
- converter.getCreationContext().getSessionFactory().getWrapperOptions()
+ converter.getCreationContext().getDialect(),
+ converter.getCreationContext().getWrapperOptions()
);
sb.append( sqlLiteral );
sb.append( ')' );
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/json/JsonObjectArgumentsValidator.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/json/JsonObjectArgumentsValidator.java
index 421212d601fe..51d0fff8e446 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/json/JsonObjectArgumentsValidator.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/json/JsonObjectArgumentsValidator.java
@@ -9,6 +9,7 @@
import org.hibernate.metamodel.mapping.JdbcMapping;
import org.hibernate.metamodel.mapping.JdbcMappingContainer;
import org.hibernate.metamodel.model.domain.DomainType;
+import org.hibernate.query.BindingContext;
import org.hibernate.query.sqm.SqmExpressible;
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
import org.hibernate.query.sqm.produce.function.FunctionArgumentException;
@@ -19,7 +20,6 @@
import org.hibernate.sql.ast.tree.expression.Expression;
import org.hibernate.sql.ast.tree.expression.JsonNullBehavior;
import org.hibernate.type.descriptor.java.JavaType;
-import org.hibernate.type.spi.TypeConfiguration;
import static org.hibernate.query.sqm.produce.function.ArgumentTypesValidator.checkArgumentType;
import static org.hibernate.query.sqm.produce.function.ArgumentTypesValidator.isUnknownExpressionType;
@@ -31,7 +31,7 @@ public class JsonObjectArgumentsValidator implements ArgumentsValidator {
public void validate(
List extends SqmTypedNode>> arguments,
String functionName,
- TypeConfiguration typeConfiguration) {
+ BindingContext bindingContext) {
if ( !arguments.isEmpty() ) {
final SqmTypedNode> lastArgument = arguments.get( arguments.size() - 1 );
final int argumentsCount;
diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/json/OracleJsonTableFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/json/OracleJsonTableFunction.java
index 97f0ee785d76..b87b4052ea2c 100644
--- a/hibernate-core/src/main/java/org/hibernate/dialect/function/json/OracleJsonTableFunction.java
+++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/json/OracleJsonTableFunction.java
@@ -5,7 +5,6 @@
package org.hibernate.dialect.function.json;
import org.hibernate.dialect.Dialect;
-import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.metamodel.mapping.JdbcMapping;
import org.hibernate.metamodel.mapping.SelectableMapping;
import org.hibernate.metamodel.mapping.SelectablePath;
@@ -118,9 +117,8 @@ protected void addSelectableMapping(List selectableMappings,
if ( isEncodedBoolean( type ) ) {
//noinspection unchecked
final JdbcLiteralFormatter