Skip to content

Commit e8518a6

Browse files
committed
HHH-17355 Small Return type resolver method cleanup and fix firstNonNull resolver
1 parent bfb9fcc commit e8518a6

File tree

5 files changed

+96
-11
lines changed

5 files changed

+96
-11
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.function.Supplier;
1111

1212
import org.hibernate.metamodel.mapping.BasicValuedMapping;
13+
import org.hibernate.metamodel.mapping.MappingModelExpressible;
1314
import org.hibernate.query.ReturnableType;
1415
import org.hibernate.query.sqm.function.NamedSqmFunctionDescriptor;
1516
import org.hibernate.query.sqm.produce.function.FunctionReturnTypeResolver;
@@ -43,6 +44,15 @@ public ReturnableType<?> resolveFunctionReturnType(
4344
ReturnableType<?> impliedType,
4445
List<? extends SqmTypedNode<?>> arguments,
4546
TypeConfiguration typeConfiguration) {
47+
return resolveFunctionReturnType( impliedType, null, arguments, typeConfiguration );
48+
}
49+
50+
@Override
51+
public ReturnableType<?> resolveFunctionReturnType(
52+
ReturnableType<?> impliedType,
53+
Supplier<MappingModelExpressible<?>> inferredTypeSupplier,
54+
List<? extends SqmTypedNode<?>> arguments,
55+
TypeConfiguration typeConfiguration) {
4656
return type == null ? null : typeConfiguration.getBasicTypeRegistry().resolve( type );
4757
}
4858

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
package org.hibernate.dialect.function;
88

99
import org.hibernate.metamodel.mapping.BasicValuedMapping;
10+
import org.hibernate.metamodel.mapping.MappingModelExpressible;
1011
import org.hibernate.query.ReturnableType;
1112
import org.hibernate.query.sqm.produce.function.FunctionReturnTypeResolver;
1213
import org.hibernate.query.sqm.tree.SqmTypedNode;
@@ -59,7 +60,16 @@ public ReturnableType<?> resolveFunctionReturnType(
5960
ReturnableType<?> impliedType,
6061
List<? extends SqmTypedNode<?>> arguments,
6162
TypeConfiguration typeConfiguration) {
62-
if (impliedType != null) {
63+
return resolveFunctionReturnType( impliedType, null, arguments, typeConfiguration );
64+
}
65+
66+
@Override
67+
public ReturnableType<?> resolveFunctionReturnType(
68+
ReturnableType<?> impliedType,
69+
Supplier<MappingModelExpressible<?>> inferredTypeSupplier,
70+
List<? extends SqmTypedNode<?>> arguments,
71+
TypeConfiguration typeConfiguration) {
72+
if ( impliedType != null ) {
6373
return impliedType;
6474
}
6575
final ReturnableType<?> argType = extractArgumentType( arguments, 1 );

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.hibernate.dialect.Dialect;
1313
import org.hibernate.metamodel.mapping.BasicValuedMapping;
1414
import org.hibernate.metamodel.mapping.JdbcMappingContainer;
15+
import org.hibernate.metamodel.mapping.MappingModelExpressible;
1516
import org.hibernate.query.ReturnableType;
1617
import org.hibernate.query.sqm.TemporalUnit;
1718
import org.hibernate.query.sqm.function.AbstractSqmSelfRenderingFunctionDescriptor;
@@ -130,6 +131,15 @@ public ReturnableType<?> resolveFunctionReturnType(
130131
ReturnableType<?> impliedType,
131132
List<? extends SqmTypedNode<?>> arguments,
132133
TypeConfiguration typeConfiguration) {
134+
return resolveFunctionReturnType( impliedType, null, arguments, typeConfiguration );
135+
}
136+
137+
@Override
138+
public ReturnableType<?> resolveFunctionReturnType(
139+
ReturnableType<?> impliedType,
140+
Supplier<MappingModelExpressible<?>> inferredTypeSupplier,
141+
List<? extends SqmTypedNode<?>> arguments,
142+
TypeConfiguration typeConfiguration) {
133143
final BasicType<?> invariantType;
134144
if ( ( (SqmDurationUnit<?>) arguments.get( 0 ) ).getUnit() == TemporalUnit.SECOND ) {
135145
invariantType = doubleType;
@@ -142,7 +152,9 @@ public ReturnableType<?> resolveFunctionReturnType(
142152
}
143153

144154
@Override
145-
public BasicValuedMapping resolveFunctionReturnType(Supplier<BasicValuedMapping> impliedTypeAccess, List<? extends SqlAstNode> arguments) {
155+
public BasicValuedMapping resolveFunctionReturnType(
156+
Supplier<BasicValuedMapping> impliedTypeAccess,
157+
List<? extends SqlAstNode> arguments) {
146158
final BasicType<?> invariantType;
147159
if ( ( (SqmDurationUnit<?>) arguments.get( 0 ) ).getUnit() == TemporalUnit.SECOND ) {
148160
invariantType = doubleType;

hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/StandardFunctionReturnTypeResolvers.java

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.hibernate.metamodel.mapping.BasicValuedMapping;
1717
import org.hibernate.metamodel.mapping.JdbcMapping;
1818
import org.hibernate.metamodel.mapping.JdbcMappingContainer;
19+
import org.hibernate.metamodel.mapping.MappingModelExpressible;
1920
import org.hibernate.metamodel.model.domain.EntityDomainType;
2021
import org.hibernate.query.ReturnableType;
2122
import org.hibernate.query.sqm.SqmExpressible;
@@ -53,12 +54,22 @@ public ReturnableType<?> resolveFunctionReturnType(
5354
ReturnableType<?> impliedType,
5455
List<? extends SqmTypedNode<?>> arguments,
5556
TypeConfiguration typeConfiguration) {
56-
return isAssignableTo( invariantType, impliedType )
57-
? impliedType : invariantType;
57+
return resolveFunctionReturnType( impliedType, null, arguments, typeConfiguration );
5858
}
5959

6060
@Override
61-
public BasicValuedMapping resolveFunctionReturnType(Supplier<BasicValuedMapping> impliedTypeAccess, List<? extends SqlAstNode> arguments) {
61+
public ReturnableType<?> resolveFunctionReturnType(
62+
ReturnableType<?> impliedType,
63+
Supplier<MappingModelExpressible<?>> inferredTypeSupplier,
64+
List<? extends SqmTypedNode<?>> arguments,
65+
TypeConfiguration typeConfiguration) {
66+
return isAssignableTo( invariantType, impliedType ) ? impliedType : invariantType;
67+
}
68+
69+
@Override
70+
public BasicValuedMapping resolveFunctionReturnType(
71+
Supplier<BasicValuedMapping> impliedTypeAccess,
72+
List<? extends SqlAstNode> arguments) {
6273
return useImpliedTypeIfPossible( invariantType, impliedTypeAccess.get() );
6374
}
6475

@@ -72,13 +83,27 @@ public String getReturnType() {
7283
public static FunctionReturnTypeResolver useArgType(int argPosition) {
7384
return new FunctionReturnTypeResolver() {
7485
@Override
75-
public ReturnableType<?> resolveFunctionReturnType(ReturnableType<?> impliedType, List<? extends SqmTypedNode<?>> arguments, TypeConfiguration typeConfiguration) {
86+
public ReturnableType<?> resolveFunctionReturnType(
87+
ReturnableType<?> impliedType,
88+
List<? extends SqmTypedNode<?>> arguments,
89+
TypeConfiguration typeConfiguration) {
90+
return resolveFunctionReturnType( impliedType, null, arguments, typeConfiguration );
91+
}
92+
93+
@Override
94+
public ReturnableType<?> resolveFunctionReturnType(
95+
ReturnableType<?> impliedType,
96+
Supplier<MappingModelExpressible<?>> inferredTypeSupplier,
97+
List<? extends SqmTypedNode<?>> arguments,
98+
TypeConfiguration typeConfiguration) {
7699
ReturnableType<?> argType = extractArgumentType( arguments, argPosition );
77100
return isAssignableTo( argType, impliedType ) ? impliedType : argType;
78101
}
79102

80103
@Override
81-
public BasicValuedMapping resolveFunctionReturnType(Supplier<BasicValuedMapping> impliedTypeAccess, List<? extends SqlAstNode> arguments) {
104+
public BasicValuedMapping resolveFunctionReturnType(
105+
Supplier<BasicValuedMapping> impliedTypeAccess,
106+
List<? extends SqlAstNode> arguments) {
82107
final BasicValuedMapping specifiedArgType = extractArgumentValuedMapping( arguments, argPosition );
83108
return useImpliedTypeIfPossible( specifiedArgType, impliedTypeAccess.get() );
84109
}
@@ -88,7 +113,9 @@ public BasicValuedMapping resolveFunctionReturnType(Supplier<BasicValuedMapping>
88113
public static FunctionReturnTypeResolver useFirstNonNull() {
89114
return new FunctionReturnTypeResolver() {
90115
@Override
91-
public BasicValuedMapping resolveFunctionReturnType(Supplier<BasicValuedMapping> impliedTypeAccess, List<? extends SqlAstNode> arguments) {
116+
public BasicValuedMapping resolveFunctionReturnType(
117+
Supplier<BasicValuedMapping> impliedTypeAccess,
118+
List<? extends SqlAstNode> arguments) {
92119
for ( SqlAstNode arg: arguments ) {
93120
if ( ! ( arg instanceof Expression ) ) {
94121
continue;
@@ -109,10 +136,21 @@ public ReturnableType<?> resolveFunctionReturnType(
109136
ReturnableType<?> impliedType,
110137
List<? extends SqmTypedNode<?>> arguments,
111138
TypeConfiguration typeConfiguration) {
139+
return resolveFunctionReturnType( impliedType, null, arguments, typeConfiguration );
140+
}
141+
142+
@Override
143+
public ReturnableType<?> resolveFunctionReturnType(
144+
ReturnableType<?> impliedType,
145+
Supplier<MappingModelExpressible<?>> inferredTypeSupplier,
146+
List<? extends SqmTypedNode<?>> arguments,
147+
TypeConfiguration typeConfiguration) {
112148
for ( int i = 0; i < arguments.size(); i++ ) {
113149
if ( arguments.get( i ) != null ) {
114150
final ReturnableType<?> argType = extractArgumentType( arguments, i + 1 );
115-
return isAssignableTo( argType, impliedType ) ? impliedType : argType;
151+
if ( argType != null ) {
152+
return isAssignableTo( argType, impliedType ) ? impliedType : argType;
153+
}
116154
}
117155
}
118156
return impliedType;

hibernate-core/src/test/java/org/hibernate/orm/test/annotations/type/dynamicparameterized/DynamicParameterizedTypeTest.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.hibernate.boot.model.FunctionContributions;
2727
import org.hibernate.boot.model.FunctionContributor;
2828
import org.hibernate.metamodel.mapping.BasicValuedMapping;
29+
import org.hibernate.metamodel.mapping.MappingModelExpressible;
2930
import org.hibernate.metamodel.model.domain.BasicDomainType;
3031
import org.hibernate.metamodel.model.domain.internal.BasicSqmPathSource;
3132
import org.hibernate.query.ReturnableType;
@@ -114,15 +115,29 @@ public void contributeFunctions(FunctionContributions functionContributions) {
114115
.patternDescriptorBuilder( "test_func1", "?1" )
115116
.setReturnTypeResolver(new FunctionReturnTypeResolver() {
116117
@Override
117-
public ReturnableType<?> resolveFunctionReturnType(ReturnableType<?> impliedType, List<? extends SqmTypedNode<?>> arguments, TypeConfiguration typeConfiguration) {
118+
public ReturnableType<?> resolveFunctionReturnType(
119+
ReturnableType<?> impliedType,
120+
List<? extends SqmTypedNode<?>> arguments,
121+
TypeConfiguration typeConfiguration) {
122+
return resolveFunctionReturnType( impliedType, null, arguments, typeConfiguration );
123+
}
124+
125+
@Override
126+
public ReturnableType<?> resolveFunctionReturnType(
127+
ReturnableType<?> impliedType,
128+
Supplier<MappingModelExpressible<?>> inferredTypeSupplier,
129+
List<? extends SqmTypedNode<?>> arguments,
130+
TypeConfiguration typeConfiguration) {
118131
SqmTypedNode<?> sqmTypedNode = arguments.get(0);
119132
BasicDomainType sqmPathType = ((BasicSqmPathSource) sqmTypedNode.getNodeType()).getSqmPathType();
120133
assertInstanceOf(CustomType.class, sqmPathType);
121134
return null;
122135
}
123136

124137
@Override
125-
public BasicValuedMapping resolveFunctionReturnType(Supplier<BasicValuedMapping> impliedTypeAccess, List<? extends SqlAstNode> arguments) {
138+
public BasicValuedMapping resolveFunctionReturnType(
139+
Supplier<BasicValuedMapping> impliedTypeAccess,
140+
List<? extends SqlAstNode> arguments) {
126141
return null;
127142
}
128143
})

0 commit comments

Comments
 (0)