diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/function/GaussDBMinMaxFunction.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/function/GaussDBMinMaxFunction.java index 769aa7aad61b..313bd0858790 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/function/GaussDBMinMaxFunction.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/function/GaussDBMinMaxFunction.java @@ -62,7 +62,7 @@ public void render( Predicate filter, ReturnableType returnType, SqlAstTranslator translator) { - final boolean caseWrapper = filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause(); + final boolean caseWrapper = filter != null && !filterClauseSupported( translator ); sqlAppender.appendSql( getName() ); sqlAppender.appendSql( '(' ); final Expression arg = (Expression) sqlAstArguments.get( 0 ); 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 02bc83b71278..8f1f3a7a5b4d 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 @@ -90,7 +90,7 @@ public void render( Predicate filter, ReturnableType returnType, SqlAstTranslator translator) { - final boolean caseWrapper = filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause(); + final boolean caseWrapper = filter != null && !filterClauseSupported( translator ); sqlAppender.appendSql( "avg(" ); final Expression arg; if ( sqlAstArguments.get( 0 ) instanceof Distinct ) { diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/CountFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/CountFunction.java index c369c081be9b..f9fb0a665246 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/CountFunction.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/CountFunction.java @@ -150,7 +150,7 @@ public void render( Predicate filter, ReturnableType returnType, SqlAstTranslator translator) { - final boolean caseWrapper = filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause(); + final boolean caseWrapper = filter != null && !filterClauseSupported( translator ); final SqlAstNode arg = sqlAstArguments.get( 0 ); sqlAppender.appendSql( countFunctionName ); sqlAppender.appendSql( '(' ); diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/GenerateSeriesArgumentTypeResolver.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/GenerateSeriesArgumentTypeResolver.java index 18095e0e418e..25ba528d7ca0 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/GenerateSeriesArgumentTypeResolver.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/GenerateSeriesArgumentTypeResolver.java @@ -19,7 +19,7 @@ /** * A {@link ArgumentsValidator} that validates the array type is compatible with the element type. */ -public class GenerateSeriesArgumentTypeResolver extends AbstractFunctionArgumentTypeResolver { +public class GenerateSeriesArgumentTypeResolver implements AbstractFunctionArgumentTypeResolver { private final BasicType durationType; diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/HypotheticalSetFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/HypotheticalSetFunction.java index b9852e473470..d2df3a16558d 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/HypotheticalSetFunction.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/HypotheticalSetFunction.java @@ -64,7 +64,7 @@ public void render( List withinGroup, ReturnableType returnType, SqlAstTranslator translator) { - if ( filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause() ) { + if ( filter != null && !filterClauseSupported( translator ) ) { throw new IllegalArgumentException( "Can't emulate filter clause for inverse distribution function [" + getName() + "]" ); } sqlAppender.appendSql( getName() ); 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 6d5798e4e353..72c2058bb4a3 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 @@ -95,7 +95,7 @@ public void render( List withinGroup, ReturnableType returnType, SqlAstTranslator translator) { - if ( filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause() ) { + if ( filter != null && !filterClauseSupported( translator ) ) { throw new IllegalArgumentException( "Can't emulate filter clause for inverse distribution function [" + getName() + "]" ); } sqlAppender.appendSql( getName() ); diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/ListaggFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/ListaggFunction.java index a53385eb8622..593ac7e16d2e 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/ListaggFunction.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/ListaggFunction.java @@ -74,7 +74,7 @@ public void render( List withinGroup, ReturnableType returnType, SqlAstTranslator translator) { - final boolean caseWrapper = filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause(); + final boolean caseWrapper = filter != null && !filterClauseSupported( translator ); sqlAppender.appendSql( "listagg(" ); final SqlAstNode firstArg = sqlAstArguments.get( 0 ); final Expression arg; diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/ListaggGroupConcatEmulation.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/ListaggGroupConcatEmulation.java index 286c1c12aa43..4fe5e8a0ac74 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/ListaggGroupConcatEmulation.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/ListaggGroupConcatEmulation.java @@ -74,7 +74,7 @@ public void render( List withinGroup, ReturnableType returnType, SqlAstTranslator translator) { - final boolean caseWrapper = filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause(); + final boolean caseWrapper = filter != null && !filterClauseSupported( translator ); sqlAppender.appendSql( "group_concat(" ); final SqlAstNode firstArg = sqlAstArguments.get( 0 ); final Expression arg; diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/ListaggStringAggEmulation.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/ListaggStringAggEmulation.java index b8cda95b148c..204ba4954ceb 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/ListaggStringAggEmulation.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/ListaggStringAggEmulation.java @@ -87,7 +87,7 @@ public void render( List withinGroup, ReturnableType returnType, SqlAstTranslator translator) { - final boolean caseWrapper = filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause(); + final boolean caseWrapper = filter != null && !filterClauseSupported( translator ); sqlAppender.appendSql( functionName ); sqlAppender.appendSql( '(' ); final SqlAstNode firstArg = sqlAstArguments.get( 0 ); diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/ModeStatsModeEmulation.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/ModeStatsModeEmulation.java index 4bf92d93d2e3..ca5e4358693b 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/ModeStatsModeEmulation.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/ModeStatsModeEmulation.java @@ -38,7 +38,7 @@ public void render( List withinGroup, ReturnableType returnType, SqlAstTranslator translator) { - final boolean caseWrapper = filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause(); + final boolean caseWrapper = filter != null && !filterClauseSupported( translator ); sqlAppender.appendSql( "stats_mode(" ); if ( withinGroup == null || withinGroup.size() != 1 ) { throw new IllegalArgumentException( "MODE function requires a WITHIN GROUP clause with exactly one order by item" ); diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/PostgreSQLMinMaxFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/PostgreSQLMinMaxFunction.java index 6f223236ed83..4b9ac6f6e5c7 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/PostgreSQLMinMaxFunction.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/PostgreSQLMinMaxFunction.java @@ -60,7 +60,7 @@ public void render( Predicate filter, ReturnableType returnType, SqlAstTranslator translator) { - final boolean caseWrapper = filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause(); + final boolean caseWrapper = filter != null && !filterClauseSupported( translator ); sqlAppender.appendSql( getName() ); sqlAppender.appendSql( '(' ); final Expression arg = (Expression) sqlAstArguments.get( 0 ); 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 46a1a8ea5ef1..b432853370ab 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 @@ -39,7 +39,7 @@ public String getArgumentListSignature() { return "(OBJECT element, INTEGER elementCount)"; } - private static class ArrayFillArgumentsValidator extends AbstractFunctionArgumentTypeResolver { + private static class ArrayFillArgumentsValidator implements AbstractFunctionArgumentTypeResolver { public static final FunctionArgumentTypeResolver INSTANCE = new ArrayFillArgumentsValidator(); diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayAggFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayAggFunction.java index 12b8958b1a4c..3a6da6dce852 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayAggFunction.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayAggFunction.java @@ -72,7 +72,7 @@ public void render( List withinGroup, ReturnableType returnType, SqlAstTranslator translator) { - final boolean caseWrapper = filter != null && ( !supportsFilter || !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause() ); + final boolean caseWrapper = filter != null && ( !supportsFilter || !filterClauseSupported( translator ) ); sqlAppender.appendSql( functionName ); sqlAppender.appendSql( '(' ); final SqlAstNode firstArg = sqlAstArguments.get( 0 ); 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 f338825a93fb..aed50d7d715d 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 @@ -21,7 +21,7 @@ * A {@link FunctionArgumentTypeResolver} that resolves the array argument type based on the element argument type * or the element argument type based on the array argument type. */ -public class ArrayAndElementArgumentTypeResolver extends AbstractFunctionArgumentTypeResolver { +public class ArrayAndElementArgumentTypeResolver implements AbstractFunctionArgumentTypeResolver { public static final FunctionArgumentTypeResolver DEFAULT_INSTANCE = new ArrayAndElementArgumentTypeResolver( 0, 1 ); 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 12238b09141e..fe48557fb0e4 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 @@ -19,7 +19,7 @@ /** * A {@link FunctionArgumentTypeResolver} that resolves the argument types for the {@code array_contains} function. */ -public class ArrayContainsArgumentTypeResolver extends AbstractFunctionArgumentTypeResolver { +public class ArrayContainsArgumentTypeResolver implements AbstractFunctionArgumentTypeResolver { public static final FunctionArgumentTypeResolver INSTANCE = new ArrayContainsArgumentTypeResolver(); diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayIncludesArgumentTypeResolver.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayIncludesArgumentTypeResolver.java index cb5b335b4457..4864d9ea29a1 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayIncludesArgumentTypeResolver.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayIncludesArgumentTypeResolver.java @@ -17,7 +17,7 @@ /** * A {@link FunctionArgumentTypeResolver} that resolves the argument types for the {@code array_includes} function. */ -public class ArrayIncludesArgumentTypeResolver extends AbstractFunctionArgumentTypeResolver { +public class ArrayIncludesArgumentTypeResolver implements AbstractFunctionArgumentTypeResolver { public static final FunctionArgumentTypeResolver INSTANCE = new ArrayIncludesArgumentTypeResolver(); diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/json/JsonArrayAggFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/json/JsonArrayAggFunction.java index 2de00df0b59c..f33dbf2c5452 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/json/JsonArrayAggFunction.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/json/JsonArrayAggFunction.java @@ -62,7 +62,7 @@ public void render( List withinGroup, ReturnableType returnType, SqlAstTranslator translator) { - final boolean caseWrapper = filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause(); + final boolean caseWrapper = filter != null && !filterClauseSupported( translator ); sqlAppender.appendSql( "json_arrayagg(" ); final SqlAstNode firstArg = sqlAstArguments.get( 0 ); final JsonNullBehavior nullBehavior; diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/json/JsonObjectAggFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/json/JsonObjectAggFunction.java index 0b14fcd719ba..843b124e821f 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/json/JsonObjectAggFunction.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/json/JsonObjectAggFunction.java @@ -72,7 +72,7 @@ protected void render( Predicate filter, ReturnableType returnType, SqlAstTranslator translator) { - final boolean caseWrapper = filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause(); + final boolean caseWrapper = filter != null && !filterClauseSupported( translator ); sqlAppender.appendSql( "json_objectagg(" ); arguments.key().accept( translator ); sqlAppender.appendSql( valueSeparator ); diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/xml/SQLServerXmlAggFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/xml/SQLServerXmlAggFunction.java index b27430d1b9f7..b893e1b06002 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/xml/SQLServerXmlAggFunction.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/xml/SQLServerXmlAggFunction.java @@ -192,7 +192,7 @@ public void render( List withinGroup, ReturnableType returnType, SqlAstTranslator translator) { - final boolean caseWrapper = filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause(); + final boolean caseWrapper = filter != null && !filterClauseSupported( translator ); sqlAppender.appendSql( "cast(string_agg(" ); final SqlAstNode firstArg = sqlAstArguments.get( 0 ); final Expression arg; diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/xml/XmlAggFunction.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/xml/XmlAggFunction.java index db1a30270dfd..e054e34d4813 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/xml/XmlAggFunction.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/xml/XmlAggFunction.java @@ -74,7 +74,7 @@ public void render( List withinGroup, ReturnableType returnType, SqlAstTranslator translator) { - final boolean caseWrapper = filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause(); + final boolean caseWrapper = filter != null && !filterClauseSupported( translator ); sqlAppender.appendSql( "xmlagg(" ); final SqlAstNode firstArg = sqlAstArguments.get( 0 ); final Expression arg; diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/function/AbstractSqmSelfRenderingFunctionDescriptor.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/function/AbstractSqmSelfRenderingFunctionDescriptor.java index 45b5e38288c3..b7c8c5c75101 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/function/AbstractSqmSelfRenderingFunctionDescriptor.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/function/AbstractSqmSelfRenderingFunctionDescriptor.java @@ -176,4 +176,7 @@ protected SelfRenderingSqmWindowFunction generateSqmWindowFunctionExpress ); } + public static boolean filterClauseSupported(SqlAstTranslator translator) { + return translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause(); + } } diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/ArgumentTypesValidator.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/ArgumentTypesValidator.java index 55742f70d016..1932bb357c7b 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/ArgumentTypesValidator.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/ArgumentTypesValidator.java @@ -75,7 +75,7 @@ public void validate( BindingContext bindingContext) { delegate.validate( arguments, functionName, bindingContext ); int count = 0; - for (SqmTypedNode argument : arguments) { + for ( var argument : arguments ) { // JdbcTypeIndicators indicators = typeConfiguration.getCurrentBaseSqlTypeIndicators(); final SqmExpressible nodeType = argument.getNodeType(); final FunctionParameterType type = count < types.length ? types[count++] : types[types.length - 1]; @@ -182,7 +182,7 @@ public void validateSqlTypes(List arguments, String functi for ( SqlAstNode argument : arguments ) { if ( argument instanceof Expression expression ) { final JdbcMappingContainer expressionType = expression.getExpressionType(); - if (expressionType != null) { + if ( expressionType != null ) { if ( isUnknownExpressionType( expressionType ) ) { count += expressionType.getJdbcTypeCount(); } @@ -199,8 +199,8 @@ public void validateSqlTypes(List arguments, String functi */ public static boolean isUnknownExpressionType(JdbcMappingContainer expressionType) { return expressionType instanceof JavaObjectType - || expressionType instanceof BasicType - && isUnknown( ((BasicType) expressionType).getJavaTypeDescriptor() ); + || expressionType instanceof BasicType basicType + && isUnknown( basicType.getJavaTypeDescriptor() ); } private int validateArgument(int paramNumber, JdbcMappingContainer expressionType, String functionName) { diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/FunctionArgumentTypeResolver.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/FunctionArgumentTypeResolver.java index 0eb88dc513a6..a807a81512a0 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/FunctionArgumentTypeResolver.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/FunctionArgumentTypeResolver.java @@ -32,7 +32,7 @@ public interface FunctionArgumentTypeResolver { * @return The resolved type. * @deprecated Use {@link #resolveFunctionArgumentType(List, int, SqmToSqlAstConverter)} instead */ - @Deprecated(forRemoval = true) + @Deprecated(forRemoval = true, since = "7.0") @Nullable MappingModelExpressible resolveFunctionArgumentType( SqmFunction function, int argumentIndex, diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/StandardArgumentsValidators.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/StandardArgumentsValidators.java index f2fc5ae9c253..4ed6e40e6145 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/StandardArgumentsValidators.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/StandardArgumentsValidators.java @@ -91,7 +91,7 @@ public void validate( @Override public String getSignature() { - StringBuilder sig = new StringBuilder("("); + final StringBuilder sig = new StringBuilder("("); for (int i=0; i> arguments, String functionName, BindingContext bindingContext) { - if (arguments.size() < minNumOfArgs || arguments.size() > maxNumOfArgs) { + if ( arguments.size() < minNumOfArgs || arguments.size() > maxNumOfArgs ) { throw new FunctionArgumentException( String.format( Locale.ROOT, @@ -203,7 +203,7 @@ public void validate( @Override public String getSignature() { - StringBuilder sig = new StringBuilder("("); + final StringBuilder sig = new StringBuilder("("); for (int i=0; i> arguments, String functionName, BindingContext bindingContext) { - for ( SqmTypedNode argument : arguments ) { - Class argType = argument.getNodeJavaType().getJavaTypeClass(); + for ( var argument : arguments ) { + var argType = argument.getNodeJavaType().getJavaTypeClass(); if ( !javaType.isAssignableFrom( argType ) ) { throw new FunctionArgumentException( String.format( @@ -255,11 +255,8 @@ public void validate( List> arguments, String functionName, BindingContext bindingContext) { - validators.forEach( individualValidator -> individualValidator.validate( - arguments, - functionName, - bindingContext - ) ); + validators.forEach( individualValidator -> + individualValidator.validate( arguments, functionName, bindingContext ) ); } }; } diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/StandardFunctionArgumentTypeResolvers.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/StandardFunctionArgumentTypeResolvers.java index 18941c7f6235..69d9b24c74da 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/StandardFunctionArgumentTypeResolvers.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/StandardFunctionArgumentTypeResolvers.java @@ -8,13 +8,9 @@ import java.sql.Date; import java.sql.Time; import java.sql.Timestamp; -import java.util.List; -import org.checkerframework.checker.nullness.qual.Nullable; import org.hibernate.metamodel.mapping.MappingModelExpressible; import org.hibernate.query.sqm.produce.function.internal.AbstractFunctionArgumentTypeResolver; -import org.hibernate.query.sqm.sql.SqmToSqlAstConverter; -import org.hibernate.query.sqm.tree.SqmTypedNode; import org.hibernate.query.sqm.tree.expression.SqmExpression; import org.hibernate.type.spi.TypeConfiguration; @@ -28,196 +24,146 @@ public final class StandardFunctionArgumentTypeResolvers { private StandardFunctionArgumentTypeResolvers() { } - public static final FunctionArgumentTypeResolver NULL = new AbstractFunctionArgumentTypeResolver() { - @Override - public @Nullable MappingModelExpressible resolveFunctionArgumentType(List> arguments, int argumentIndex, SqmToSqlAstConverter converter) { - return null; - } - }; - - public static final FunctionArgumentTypeResolver IMPLIED_RESULT_TYPE = new AbstractFunctionArgumentTypeResolver() { - @Override - public @Nullable MappingModelExpressible resolveFunctionArgumentType(List> arguments, int argumentIndex, SqmToSqlAstConverter converter) { - return converter.resolveFunctionImpliedReturnType(); - } - }; - - public static final FunctionArgumentTypeResolver ARGUMENT_OR_IMPLIED_RESULT_TYPE = new AbstractFunctionArgumentTypeResolver() { - @Override - public @Nullable MappingModelExpressible resolveFunctionArgumentType(List> arguments, int argumentIndex, SqmToSqlAstConverter converter) { - final int argumentsSize = arguments.size(); - for ( int i = 0; i < argumentIndex; i++ ) { - final SqmTypedNode node = arguments.get( i ); - if ( node instanceof SqmExpression ) { - final MappingModelExpressible expressible = converter.determineValueMapping( - (SqmExpression) node ); - if ( expressible != null ) { - return expressible; - } - } - } - for ( int i = argumentIndex + 1; i < argumentsSize; i++ ) { - final SqmTypedNode node = arguments.get( i ); - if ( node instanceof SqmExpression ) { - final MappingModelExpressible expressible = converter.determineValueMapping( - (SqmExpression) node ); - if ( expressible != null ) { - return expressible; - } - } - } + public static final FunctionArgumentTypeResolver NULL = + (AbstractFunctionArgumentTypeResolver) + (arguments, argumentIndex, converter) -> null; + + public static final FunctionArgumentTypeResolver IMPLIED_RESULT_TYPE = + (AbstractFunctionArgumentTypeResolver) + (arguments, argumentIndex, converter) + -> converter.resolveFunctionImpliedReturnType(); + + public static final FunctionArgumentTypeResolver ARGUMENT_OR_IMPLIED_RESULT_TYPE = + (AbstractFunctionArgumentTypeResolver) + (arguments, argumentIndex, converter) -> { + final int argumentsSize = arguments.size(); + for ( int i = 0; i < argumentIndex; i++ ) { + if ( arguments.get( i ) instanceof SqmExpression expression ) { + final var expressible = converter.determineValueMapping( expression ); + if ( expressible != null ) { + return expressible; + } + } + } + for ( int i = argumentIndex + 1; i < argumentsSize; i++ ) { + if ( arguments.get( i ) instanceof SqmExpression expression ) { + final var expressible = converter.determineValueMapping( expression ); + if ( expressible != null ) { + return expressible; + } + } + } - return converter.resolveFunctionImpliedReturnType(); - } + return converter.resolveFunctionImpliedReturnType(); }; public static FunctionArgumentTypeResolver invariant( TypeConfiguration typeConfiguration, FunctionParameterType type) { - final MappingModelExpressible expressible = getMappingModelExpressible( typeConfiguration, type ); - return new AbstractFunctionArgumentTypeResolver() { - @Override - public @Nullable MappingModelExpressible resolveFunctionArgumentType(List> arguments, int argumentIndex, SqmToSqlAstConverter converter) { - return expressible; - } - }; + final var expressible = getMappingModelExpressible( typeConfiguration, type ); + return (AbstractFunctionArgumentTypeResolver) + (arguments, argumentIndex, converter) -> expressible; } public static FunctionArgumentTypeResolver invariant( TypeConfiguration typeConfiguration, FunctionParameterType... types) { - final MappingModelExpressible[] expressibles = new MappingModelExpressible[types.length]; + final var expressibles = new MappingModelExpressible[types.length]; for ( int i = 0; i < types.length; i++ ) { expressibles[i] = getMappingModelExpressible( typeConfiguration, types[i] ); } - - return new AbstractFunctionArgumentTypeResolver() { - @Override - public @Nullable MappingModelExpressible resolveFunctionArgumentType(List> arguments, int argumentIndex, SqmToSqlAstConverter converter) { - return argumentIndex < expressibles.length ? expressibles[argumentIndex] : null; - } - }; + return (AbstractFunctionArgumentTypeResolver) + (arguments, argumentIndex, converter) + -> argumentIndex < expressibles.length ? expressibles[argumentIndex] : null; } public static FunctionArgumentTypeResolver invariant(FunctionParameterType... types) { - return new AbstractFunctionArgumentTypeResolver() { - @Override - public @Nullable MappingModelExpressible resolveFunctionArgumentType(List> arguments, int argumentIndex, SqmToSqlAstConverter converter) { - if ( argumentIndex >= types.length ) { - return null; - } - return getMappingModelExpressible( - converter.getCreationContext().getTypeConfiguration(), - types[argumentIndex] - ); - } - }; + return (AbstractFunctionArgumentTypeResolver) + (arguments, argumentIndex, converter) -> { + if ( argumentIndex >= types.length ) { + return null; + } + return getMappingModelExpressible( + converter.getCreationContext().getTypeConfiguration(), + types[argumentIndex] + ); + }; } public static FunctionArgumentTypeResolver impliedOrInvariant( TypeConfiguration typeConfiguration, FunctionParameterType type) { - final MappingModelExpressible expressible = getMappingModelExpressible( typeConfiguration, type ); - return new AbstractFunctionArgumentTypeResolver() { - @Override - public @Nullable MappingModelExpressible resolveFunctionArgumentType(List> arguments, int argumentIndex, SqmToSqlAstConverter converter) { - final MappingModelExpressible mappingModelExpressible = converter.resolveFunctionImpliedReturnType(); - if ( mappingModelExpressible != null ) { - return mappingModelExpressible; - } - return expressible; - } - }; + final var expressible = getMappingModelExpressible( typeConfiguration, type ); + return (AbstractFunctionArgumentTypeResolver) + (arguments, argumentIndex, converter) -> { + final var mappingModelExpressible = converter.resolveFunctionImpliedReturnType(); + return mappingModelExpressible == null ? expressible : mappingModelExpressible; + }; } public static FunctionArgumentTypeResolver argumentsOrImplied(int... indices) { - return new AbstractFunctionArgumentTypeResolver() { - @Override - public @Nullable MappingModelExpressible resolveFunctionArgumentType(List> arguments, int argumentIndex, SqmToSqlAstConverter converter) { - final int argumentsSize = arguments.size(); - for ( int index : indices ) { - if ( index >= argumentIndex || index >= argumentsSize ) { - break; - } - final SqmTypedNode node = arguments.get( index ); - if ( node instanceof SqmExpression ) { - final MappingModelExpressible expressible = converter.determineValueMapping( - (SqmExpression) node ); - if ( expressible != null ) { - return expressible; + return (AbstractFunctionArgumentTypeResolver) + (arguments, argumentIndex, converter) -> { + final int argumentsSize = arguments.size(); + for ( int index : indices ) { + if ( index >= argumentIndex || index >= argumentsSize ) { + break; + } + if ( arguments.get( index ) instanceof SqmExpression expression ) { + final var expressible = converter.determineValueMapping( expression ); + if ( expressible != null ) { + return expressible; + } } } - } - for ( int index : indices ) { - if ( index <= argumentIndex || index >= argumentsSize ) { - break; - } - final SqmTypedNode node = arguments.get( index ); - if ( node instanceof SqmExpression ) { - final MappingModelExpressible expressible = converter.determineValueMapping( - (SqmExpression) node ); - if ( expressible != null ) { - return expressible; + for ( int index : indices ) { + if ( index <= argumentIndex || index >= argumentsSize ) { + break; + } + if ( arguments.get( index ) instanceof SqmExpression expression ) { + final var expressible = converter.determineValueMapping( expression ); + if ( expressible != null ) { + return expressible; + } } } - } - - return converter.resolveFunctionImpliedReturnType(); - } - }; + return converter.resolveFunctionImpliedReturnType(); + }; } public static FunctionArgumentTypeResolver composite(FunctionArgumentTypeResolver... resolvers) { - return new AbstractFunctionArgumentTypeResolver() { - @Override - public @Nullable MappingModelExpressible resolveFunctionArgumentType(List> arguments, int argumentIndex, SqmToSqlAstConverter converter) { - for ( FunctionArgumentTypeResolver resolver : resolvers ) { - final MappingModelExpressible result = resolver.resolveFunctionArgumentType( - arguments, - argumentIndex, - converter - ); - if ( result != null ) { - return result; + return (AbstractFunctionArgumentTypeResolver) + (arguments, argumentIndex, converter) -> { + for ( var resolver : resolvers ) { + final var result = resolver.resolveFunctionArgumentType( arguments, argumentIndex, converter ); + if ( result != null ) { + return result; + } } - } - - return null; - } - }; + return null; + }; } public static FunctionArgumentTypeResolver byArgument(FunctionArgumentTypeResolver... resolvers) { - return new AbstractFunctionArgumentTypeResolver() { - @Override - public @Nullable MappingModelExpressible resolveFunctionArgumentType(List> arguments, int argumentIndex, SqmToSqlAstConverter converter) { - return argumentIndex < resolvers.length + return (AbstractFunctionArgumentTypeResolver) + (arguments, argumentIndex, converter) + -> argumentIndex < resolvers.length ? resolvers[argumentIndex].resolveFunctionArgumentType( arguments, argumentIndex, converter ) : null; - } - }; } private static MappingModelExpressible getMappingModelExpressible( TypeConfiguration typeConfiguration, FunctionParameterType type) { - switch ( type ) { - case STRING: - case STRING_OR_CLOB: - return typeConfiguration.getBasicTypeForJavaType( String.class ); - case NUMERIC: - return typeConfiguration.getBasicTypeForJavaType( BigDecimal.class ); - case INTEGER: - return typeConfiguration.getBasicTypeForJavaType( Integer.class ); - case TEMPORAL: - return typeConfiguration.getBasicTypeForJavaType( Timestamp.class ); - case DATE: - return typeConfiguration.getBasicTypeForJavaType( Date.class ); - case TIME: - return typeConfiguration.getBasicTypeForJavaType( Time.class ); - case BOOLEAN: - return typeConfiguration.getBasicTypeForJavaType( Boolean.class ); - } - return null; + return switch ( type ) { + case STRING, STRING_OR_CLOB -> typeConfiguration.getBasicTypeForJavaType( String.class ); + case NUMERIC -> typeConfiguration.getBasicTypeForJavaType( BigDecimal.class ); + case INTEGER -> typeConfiguration.getBasicTypeForJavaType( Integer.class ); + case TEMPORAL -> typeConfiguration.getBasicTypeForJavaType( Timestamp.class ); + case DATE -> typeConfiguration.getBasicTypeForJavaType( Date.class ); + case TIME -> typeConfiguration.getBasicTypeForJavaType( Time.class ); + case BOOLEAN -> typeConfiguration.getBasicTypeForJavaType( Boolean.class ); + default -> null; + }; } } diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/StandardFunctionReturnTypeResolvers.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/StandardFunctionReturnTypeResolvers.java index 4e6a1748cce8..4fb1f0d59e84 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/StandardFunctionReturnTypeResolvers.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/StandardFunctionReturnTypeResolvers.java @@ -11,7 +11,6 @@ import org.hibernate.Internal; import org.hibernate.metamodel.mapping.BasicValuedMapping; import org.hibernate.metamodel.mapping.JdbcMapping; -import org.hibernate.metamodel.mapping.JdbcMappingContainer; import org.hibernate.metamodel.model.domain.ReturnableType; import org.hibernate.query.sqm.SqmExpressible; import org.hibernate.query.sqm.sql.SqmToSqlAstConverter; @@ -80,7 +79,7 @@ public ReturnableType resolveFunctionReturnType( @Nullable SqmToSqlAstConverter converter, List> arguments, TypeConfiguration typeConfiguration) { - ReturnableType argType = extractArgumentType( arguments, argPosition ); + final var argType = extractArgumentType( arguments, argPosition ); return isAssignableTo( argType, impliedType ) ? impliedType : argType; } @@ -88,7 +87,7 @@ public ReturnableType resolveFunctionReturnType( public BasicValuedMapping resolveFunctionReturnType( Supplier impliedTypeAccess, List arguments) { - final BasicValuedMapping specifiedArgType = extractArgumentValuedMapping( arguments, argPosition ); + final var specifiedArgType = extractArgumentValuedMapping( arguments, argPosition ); return useImpliedTypeIfPossible( specifiedArgType, impliedTypeAccess.get() ); } }; @@ -117,7 +116,7 @@ public ReturnableType resolveFunctionReturnType( TypeConfiguration typeConfiguration) { for ( int i = 0; i < arguments.size(); i++ ) { if ( arguments.get( i ) != null ) { - final ReturnableType argType = extractArgumentType( arguments, i + 1 ); + final var argType = extractArgumentType( arguments, i + 1 ); if ( argType != null ) { return isAssignableTo( argType, impliedType ) ? impliedType : argType; } @@ -154,11 +153,11 @@ public static boolean isAssignableTo(JdbcMapping defined, JdbcMapping implied) { //that is determined by how the function is used in the HQL query. In essence //the types are compatible if the map to the same JDBC type, of if they are //both numeric types. - int impliedTypeCode = implied.getJdbcType().getDefaultSqlTypeCode(); - int definedTypeCode = defined.getJdbcType().getDefaultSqlTypeCode(); + final int impliedTypeCode = implied.getJdbcType().getDefaultSqlTypeCode(); + final int definedTypeCode = defined.getJdbcType().getDefaultSqlTypeCode(); return impliedTypeCode == definedTypeCode - || isNumericType( impliedTypeCode ) && isNumericType( definedTypeCode ) - || isCharacterOrClobType( impliedTypeCode ) && isCharacterOrClobType( definedTypeCode ); + || isNumericType( impliedTypeCode ) && isNumericType( definedTypeCode ) + || isCharacterOrClobType( impliedTypeCode ) && isCharacterOrClobType( definedTypeCode ); } @Internal @@ -252,7 +251,7 @@ private static SqmExpressible getArgumentExpressible(SqmTypedNode specifie public static BasicValuedMapping extractArgumentValuedMapping(List arguments, int position) { final SqlAstNode specifiedArgument = arguments.get( position-1 ); - final JdbcMappingContainer specifiedArgType = + final var specifiedArgType = specifiedArgument instanceof Expression expression ? expression.getExpressionType() : null; diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/AbstractFunctionArgumentTypeResolver.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/AbstractFunctionArgumentTypeResolver.java index 169571f22cf0..51c34a50b529 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/AbstractFunctionArgumentTypeResolver.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/AbstractFunctionArgumentTypeResolver.java @@ -13,13 +13,14 @@ import java.util.List; -public abstract class AbstractFunctionArgumentTypeResolver implements FunctionArgumentTypeResolver { +@FunctionalInterface +public interface AbstractFunctionArgumentTypeResolver extends FunctionArgumentTypeResolver { @Override @SuppressWarnings("removal") - public @Nullable MappingModelExpressible resolveFunctionArgumentType(SqmFunction function, int argumentIndex, SqmToSqlAstConverter converter) { + default @Nullable MappingModelExpressible resolveFunctionArgumentType(SqmFunction function, int argumentIndex, SqmToSqlAstConverter converter) { return resolveFunctionArgumentType( function.getArguments(), argumentIndex, converter ); } @Override - public abstract @Nullable MappingModelExpressible resolveFunctionArgumentType(List> arguments, int argumentIndex, SqmToSqlAstConverter converter); + @Nullable MappingModelExpressible resolveFunctionArgumentType(List> arguments, int argumentIndex, SqmToSqlAstConverter converter); } diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/PatternRenderer.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/PatternRenderer.java index badb6b18c22c..506fd0e80428 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/PatternRenderer.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/PatternRenderer.java @@ -17,9 +17,14 @@ import org.hibernate.sql.ast.tree.select.SortSpecification; import java.util.ArrayList; -import java.util.Collections; import java.util.List; +import static java.lang.Character.isDigit; +import static java.lang.Integer.parseInt; +import static java.util.Collections.emptyList; +import static org.hibernate.internal.util.collections.ArrayHelper.EMPTY_STRING_ARRAY; +import static org.hibernate.query.sqm.function.AbstractSqmSelfRenderingFunctionDescriptor.filterClauseSupported; + /** * Delegate for handling function "templates". * @@ -73,7 +78,7 @@ public PatternRenderer(String pattern, SqlAstNodeRenderingMode[] argumentRenderi while ( ++i < pattern.length() ) { c = pattern.charAt( i ); - if ( Character.isDigit( c ) ) { + if ( isDigit( c ) ) { index.append( c ); } else if ( c == '.' ) { @@ -93,7 +98,7 @@ else if ( c == '?' ) { vararg = paramList.size(); } else { - int paramNumber = Integer.parseInt( index.toString() ); + final int paramNumber = parseInt( index.toString() ); paramList.add( paramNumber ); index.setLength(0); if ( paramNumber > max ) { @@ -107,14 +112,14 @@ else if ( c == '?' ) { i++; } - if ( chunk.length() > 0 ) { + if ( !chunk.isEmpty() ) { chunkList.add( chunk.toString() ); } this.varargParam = vararg; this.maxParamIndex = max; - this.chunks = chunkList.toArray( new String[chunkList.size()] ); + this.chunks = chunkList.toArray( EMPTY_STRING_ARRAY ); int[] paramIndexes = new int[paramList.size()]; for ( i = 0; i < paramIndexes.length; ++i ) { paramIndexes[i] = paramList.get( i ); @@ -142,7 +147,7 @@ public void render( SqlAppender sqlAppender, List args, SqlAstTranslator translator) { - render( sqlAppender, args, null, Collections.emptyList(), translator ); + render( sqlAppender, args, null, emptyList(), translator ); } public void render( @@ -150,7 +155,7 @@ public void render( List args, Predicate filter, SqlAstTranslator translator) { - render( sqlAppender, args, filter, Collections.emptyList(), null, null, translator ); + render( sqlAppender, args, filter, emptyList(), null, null, translator ); } public void render( @@ -169,7 +174,7 @@ public void render( Boolean respectNulls, Boolean fromFirst, SqlAstTranslator translator) { - render( sqlAppender, args, filter, Collections.emptyList(), respectNulls, fromFirst, translator ); + render( sqlAppender, args, filter, emptyList(), respectNulls, fromFirst, translator ); } private void render( @@ -181,19 +186,21 @@ private void render( Boolean fromFirst, SqlAstTranslator translator) { final int numberOfArguments = args.size(); - final boolean caseWrapper = filter != null && !translator.getSessionFactory().getJdbcServices().getDialect().supportsFilterClause(); if ( numberOfArguments < maxParamIndex ) { LOG.missingArguments( maxParamIndex, numberOfArguments ); } + final boolean caseWrapper = filter != null && !filterClauseSupported( translator ); for ( int i = 0; i < chunks.length; i++ ) { if ( i == varargParam ) { - final SqlAstNodeRenderingMode argumentRenderingMode = getArgumentRenderingMode(varargParam - 1); + final var argumentRenderingMode = getArgumentRenderingMode(varargParam - 1); for ( int j = i; j < numberOfArguments; j++ ) { final SqlAstNode arg = args.get( j ); if ( arg != null ) { sqlAppender.appendSql( chunks[i] ); - if ( caseWrapper && !( arg instanceof Distinct ) && !( arg instanceof Star ) ) { + if ( caseWrapper + && !( arg instanceof Distinct ) + && !( arg instanceof Star ) ) { translator.getCurrentClauseStack().push( Clause.WHERE ); sqlAppender.appendSql( "case when " ); filter.accept( translator ); @@ -210,12 +217,14 @@ private void render( } else if ( i < paramIndexes.length ) { final int index = paramIndexes[i] - 1; - final SqlAstNode arg = index < numberOfArguments ? args.get( index ) : null; + final var arg = index < numberOfArguments ? args.get( index ) : null; if ( arg != null || i == 0 ) { sqlAppender.appendSql( chunks[i] ); } if ( arg != null ) { - if ( caseWrapper && !( arg instanceof Distinct ) && !( arg instanceof Star ) ) { + if ( caseWrapper && + !( arg instanceof Distinct ) && + !( arg instanceof Star ) ) { translator.getCurrentClauseStack().push( Clause.WHERE ); sqlAppender.appendSql( "case when " ); filter.accept( translator ); @@ -247,20 +256,10 @@ else if ( i < paramIndexes.length ) { } if ( fromFirst != null ) { - if ( fromFirst ) { - sqlAppender.appendSql( " from first" ); - } - else { - sqlAppender.appendSql( " from last" ); - } + sqlAppender.appendSql( fromFirst ? " from first" : " from last" ); } if ( respectNulls != null ) { - if ( respectNulls ) { - sqlAppender.appendSql( " respect nulls" ); - } - else { - sqlAppender.appendSql( " ignore nulls" ); - } + sqlAppender.appendSql( respectNulls ? " respect nulls" : " ignore nulls" ); } if ( filter != null && !caseWrapper ) { @@ -273,9 +272,8 @@ else if ( i < paramIndexes.length ) { } private SqlAstNodeRenderingMode getArgumentRenderingMode(int index) { - if ( index < argumentRenderingModes.length ) { - return argumentRenderingModes[index]; - } - return argumentRenderingModes[argumentRenderingModes.length - 1]; + return index < argumentRenderingModes.length + ? argumentRenderingModes[index] + : argumentRenderingModes[argumentRenderingModes.length - 1]; } } diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/SetReturningFunctionTypeResolverBuilder.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/SetReturningFunctionTypeResolverBuilder.java index ab4c0427cd5e..7b8db383ac5b 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/SetReturningFunctionTypeResolverBuilder.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/SetReturningFunctionTypeResolverBuilder.java @@ -120,7 +120,8 @@ public SelectableMapping[] resolveFunctionReturnType( boolean lateral, boolean withOrdinality, SqmToSqlAstConverter converter) { - final SelectableMapping[] selectableMappings = new SelectableMapping[typeResolvers.length + (withOrdinality ? 1 : 0)]; + final SelectableMapping[] selectableMappings = + new SelectableMapping[typeResolvers.length + (withOrdinality ? 1 : 0)]; int i = 0; for ( TypeResolver typeResolver : typeResolvers ) { final JdbcMapping jdbcMapping = typeResolver.resolveFunctionReturnType( arguments, converter ); @@ -148,7 +149,7 @@ public SelectableMapping[] resolveFunctionReturnType( if ( withOrdinality ) { selectableMappings[i] = new SelectableMappingImpl( "", - determineIndexSelectionExpression( selectableMappings, tableIdentifierVariable, converter ), + determineIndexSelectionExpression( selectableMappings, converter ), new SelectablePath( CollectionPart.Nature.INDEX.getName() ), null, null, @@ -163,13 +164,14 @@ public SelectableMapping[] resolveFunctionReturnType( false, false, false, - converter.getCreationContext().getTypeConfiguration().getBasicTypeForJavaType( Long.class ) + converter.getCreationContext().getTypeConfiguration() + .getBasicTypeForJavaType( Long.class ) ); } return selectableMappings; } - private String determineIndexSelectionExpression(SelectableMapping[] selectableMappings, String tableIdentifierVariable, SqmToSqlAstConverter walker) { + private String determineIndexSelectionExpression(SelectableMapping[] selectableMappings, SqmToSqlAstConverter walker) { final String defaultOrdinalityColumnName = walker.getCreationContext().getDialect() .getDefaultOrdinalityColumnName(); diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/VectorArgumentTypeResolver.java b/hibernate-vector/src/main/java/org/hibernate/vector/VectorArgumentTypeResolver.java index 31f9062ecf22..4af45fd9f44e 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/VectorArgumentTypeResolver.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/VectorArgumentTypeResolver.java @@ -19,7 +19,7 @@ /** * A {@link FunctionArgumentTypeResolver} for {@link SqlTypes#VECTOR} functions. */ -public class VectorArgumentTypeResolver extends AbstractFunctionArgumentTypeResolver { +public class VectorArgumentTypeResolver implements AbstractFunctionArgumentTypeResolver { public static final FunctionArgumentTypeResolver INSTANCE = new VectorArgumentTypeResolver();