Skip to content

Commit afd6b2c

Browse files
committed
cleanup typing issues in a function hierarchy
1 parent aacc0e2 commit afd6b2c

11 files changed

+97
-148
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public QuerySpec transform(
125125
final Expression expression = subSelections.get( i ).getExpression();
126126
final Expression finalExpression;
127127
if ( expression == windowFunction ) {
128-
finalExpression = new SelfRenderingAggregateFunctionSqlAstExpression(
128+
finalExpression = new SelfRenderingAggregateFunctionSqlAstExpression<>(
129129
"min",
130130
(sqlAppender, sqlAstArguments, returnType, walker1) -> {
131131
sqlAppender.appendSql( "min(" );

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public static void renderCastArrayToString(
105105
sqlAppender,
106106
List.of(
107107
new QueryLiteral<>( "[", stringType ),
108-
new SelfRenderingFunctionSqlAstExpression(
108+
new SelfRenderingFunctionSqlAstExpression<>(
109109
"array_to_string",
110110
arrayToStringDescriptor,
111111
List.of(

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

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package org.hibernate.dialect.function;
66

77
import java.util.ArrayList;
8-
import java.util.Collections;
98
import java.util.List;
109

1110
import org.hibernate.metamodel.model.domain.ReturnableType;
@@ -28,6 +27,8 @@
2827
import org.hibernate.type.BasicTypeReference;
2928
import org.hibernate.type.spi.TypeConfiguration;
3029

30+
import static java.util.Collections.emptyList;
31+
3132
/**
3233
* @author Christian Beikov
3334
*/
@@ -79,7 +80,7 @@ else if ( currentClause != Clause.SELECT ) {
7980
}
8081
List<SortSpecification> withinGroup;
8182
if ( this.getWithinGroup() == null ) {
82-
withinGroup = Collections.emptyList();
83+
withinGroup = emptyList();
8384
}
8485
else {
8586
walker.getCurrentClauseStack().push( Clause.ORDER );
@@ -97,15 +98,16 @@ else if ( currentClause != Clause.SELECT ) {
9798
walker.getCurrentClauseStack().pop();
9899
}
99100
}
100-
final SelfRenderingFunctionSqlAstExpression function = new SelfRenderingOrderedSetAggregateFunctionSqlAstExpression(
101-
getFunctionName(),
102-
getFunctionRenderer(),
103-
Collections.emptyList(),
104-
getFilter() == null ? null : (Predicate) getFilter().accept( walker ),
105-
Collections.emptyList(),
106-
resultType,
107-
getMappingModelExpressible( walker, resultType, arguments )
108-
);
101+
final SelfRenderingFunctionSqlAstExpression<?> function =
102+
new SelfRenderingOrderedSetAggregateFunctionSqlAstExpression<>(
103+
getFunctionName(),
104+
getFunctionRenderer(),
105+
emptyList(),
106+
getFilter() == null ? null : (Predicate) getFilter().accept( walker ),
107+
emptyList(),
108+
resultType,
109+
getMappingModelExpressible( walker, resultType, arguments )
110+
);
109111
final Over<Object> windowFunction = new Over<>( function, new ArrayList<>(), withinGroup );
110112
walker.registerQueryTransformer(
111113
new AggregateWindowEmulationQueryTransformer( windowFunction, withinGroup, arguments )

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

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ else if ( currentClause != Clause.SELECT ) {
6767
}
6868
final ReturnableType<?> resultType = resolveResultType( walker );
6969

70-
List<SqlAstNode> arguments = resolveSqlAstArguments( getArguments(), walker );
71-
ArgumentsValidator argumentsValidator = getArgumentsValidator();
70+
final List<SqlAstNode> arguments = resolveSqlAstArguments( getArguments(), walker );
71+
final ArgumentsValidator argumentsValidator = getArgumentsValidator();
7272
if ( argumentsValidator != null ) {
7373
argumentsValidator.validateSqlTypes( arguments, getFunctionName() );
7474
}
75-
List<SortSpecification> withinGroup;
75+
final List<SortSpecification> withinGroup;
7676
if ( this.getWithinGroup() == null ) {
7777
withinGroup = Collections.emptyList();
7878
}
@@ -92,15 +92,16 @@ else if ( currentClause != Clause.SELECT ) {
9292
walker.getCurrentClauseStack().pop();
9393
}
9494
}
95-
final SelfRenderingFunctionSqlAstExpression function = new SelfRenderingOrderedSetAggregateFunctionSqlAstExpression(
96-
getFunctionName(),
97-
getFunctionRenderer(),
98-
arguments,
99-
getFilter() == null ? null : (Predicate) getFilter().accept( walker ),
100-
withinGroup,
101-
resultType,
102-
getMappingModelExpressible( walker, resultType, arguments )
103-
);
95+
final SelfRenderingFunctionSqlAstExpression<?> function =
96+
new SelfRenderingOrderedSetAggregateFunctionSqlAstExpression<>(
97+
getFunctionName(),
98+
getFunctionRenderer(),
99+
arguments,
100+
getFilter() == null ? null : (Predicate) getFilter().accept( walker ),
101+
withinGroup,
102+
resultType,
103+
getMappingModelExpressible( walker, resultType, arguments )
104+
);
104105
final Over<Object> windowFunction = new Over<>( function, new ArrayList<>(), Collections.emptyList() );
105106
walker.registerQueryTransformer(
106107
new AggregateWindowEmulationQueryTransformer( windowFunction, withinGroup, null )

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
*
2222
* @author Christian Beikov
2323
*/
24-
public class SelfRenderingAggregateFunctionSqlAstExpression extends SelfRenderingFunctionSqlAstExpression
24+
public class SelfRenderingAggregateFunctionSqlAstExpression<T> extends SelfRenderingFunctionSqlAstExpression<T>
2525
implements AggregateFunctionExpression {
2626

2727
private final Predicate filter;
@@ -31,7 +31,7 @@ public SelfRenderingAggregateFunctionSqlAstExpression(
3131
FunctionRenderer renderer,
3232
List<? extends SqlAstNode> sqlAstArguments,
3333
Predicate filter,
34-
ReturnableType<?> type,
34+
ReturnableType<T> type,
3535
JdbcMappingContainer expressible) {
3636
super( functionName, renderer, sqlAstArguments, type, expressible );
3737
this.filter = filter;

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

Lines changed: 28 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,17 @@
66

77
import java.util.List;
88

9-
import org.hibernate.dialect.Dialect;
109
import org.hibernate.engine.spi.SessionFactoryImplementor;
1110
import org.hibernate.internal.util.IndexedConsumer;
12-
import org.hibernate.mapping.Selectable;
13-
import org.hibernate.mapping.Table;
1411
import org.hibernate.metamodel.mapping.JdbcMapping;
1512
import org.hibernate.metamodel.mapping.JdbcMappingContainer;
1613
import org.hibernate.metamodel.mapping.SqlExpressible;
14+
import org.hibernate.sql.ast.spi.SqlAstCreationState;
1715
import org.hibernate.type.descriptor.converter.spi.BasicValueConverter;
1816
import org.hibernate.metamodel.model.domain.ReturnableType;
1917
import org.hibernate.query.sqm.sql.internal.DomainResultProducer;
2018
import org.hibernate.sql.ast.SqlAstTranslator;
2119
import org.hibernate.sql.ast.spi.SqlAppender;
22-
import org.hibernate.sql.ast.spi.SqlAstCreationState;
2320
import org.hibernate.sql.ast.spi.SqlSelection;
2421
import org.hibernate.sql.ast.tree.SqlAstNode;
2522
import org.hibernate.sql.ast.tree.expression.FunctionExpression;
@@ -39,19 +36,19 @@
3936
*
4037
* @author Steve Ebersole
4138
*/
42-
public class SelfRenderingFunctionSqlAstExpression
43-
implements SelfRenderingExpression, Selectable, SqlExpressible, DomainResultProducer, FunctionExpression {
39+
public class SelfRenderingFunctionSqlAstExpression<T>
40+
implements SelfRenderingExpression, SqlExpressible, DomainResultProducer<T>, FunctionExpression {
4441
private final String functionName;
4542
private final FunctionRenderer renderer;
4643
private final List<? extends SqlAstNode> sqlAstArguments;
47-
private final @Nullable ReturnableType<?> type;
44+
private final @Nullable ReturnableType<T> type;
4845
private final @Nullable JdbcMappingContainer expressible;
4946

5047
public SelfRenderingFunctionSqlAstExpression(
5148
String functionName,
5249
FunctionRenderer renderer,
5350
List<? extends SqlAstNode> sqlAstArguments,
54-
@Nullable ReturnableType<?> type,
51+
@Nullable ReturnableType<T> type,
5552
@Nullable JdbcMappingContainer expressible) {
5653
this.functionName = functionName;
5754
this.renderer = renderer;
@@ -78,11 +75,11 @@ public JdbcMappingContainer getExpressionType() {
7875
: expressible;
7976
}
8077

81-
protected FunctionRenderer getFunctionRenderer() {
78+
FunctionRenderer getFunctionRenderer() {
8279
return renderer;
8380
}
8481

85-
protected @Nullable ReturnableType<?> getType() {
82+
@Nullable ReturnableType<?> getType() {
8683
return type;
8784
}
8885

@@ -93,23 +90,18 @@ public SqlSelection createSqlSelection(
9390
JavaType javaType,
9491
boolean virtual,
9592
TypeConfiguration typeConfiguration) {
96-
return new SqlSelectionImpl(
97-
jdbcPosition,
98-
valuesArrayPosition,
99-
this,
100-
virtual
101-
);
93+
return new SqlSelectionImpl( jdbcPosition, valuesArrayPosition, this, virtual );
10294
}
10395

10496
@Override
105-
public DomainResult<?> createDomainResult(
97+
public DomainResult<T> createDomainResult(
10698
String resultVariable,
10799
DomainResultCreationState creationState) {
108100
final JdbcMapping jdbcMapping = getJdbcMapping();
109-
final JavaType<?> jdbcJavaType;
110-
final BasicValueConverter<?, ?> converter;
101+
final JavaType<T> jdbcJavaType;
102+
final BasicValueConverter<T, ?> converter;
111103
if ( jdbcMapping != null ) {
112-
jdbcJavaType = jdbcMapping.getJdbcJavaType();
104+
jdbcJavaType = (JavaType<T>) jdbcMapping.getJdbcJavaType();
113105
converter = jdbcMapping.getValueConverter();
114106
}
115107
else if ( type != null ) {
@@ -120,17 +112,8 @@ else if ( type != null ) {
120112
jdbcJavaType = null;
121113
converter = null;
122114
}
123-
final SqlAstCreationState sqlAstCreationState = creationState.getSqlAstCreationState();
124-
return new BasicResult(
125-
sqlAstCreationState.getSqlExpressionResolver()
126-
.resolveSqlSelection(
127-
this,
128-
jdbcJavaType,
129-
null,
130-
sqlAstCreationState.getCreationContext()
131-
.getMappingMetamodel().getTypeConfiguration()
132-
)
133-
.getValuesArrayPosition(),
115+
return new BasicResult<>(
116+
resolveSqlSelection( creationState, jdbcJavaType ).getValuesArrayPosition(),
134117
resultVariable,
135118
type == null ? null : type.getExpressibleJavaType(),
136119
converter,
@@ -148,53 +131,13 @@ public void renderToSql(
148131
renderer.render( sqlAppender, sqlAstArguments, type, walker );
149132
}
150133

151-
@Override
152-
public String getAlias(Dialect dialect) {
153-
return null;
154-
}
155-
156-
@Override
157-
public String getAlias(Dialect dialect, Table table) {
158-
return null;
159-
}
160-
161-
@Override
162-
public boolean isFormula() {
163-
return false;
164-
}
165-
166-
@Override
167-
public String getTemplate(Dialect dialect, TypeConfiguration typeConfiguration, SqmFunctionRegistry registry) {
168-
return null;
169-
}
170-
171-
@Override
172-
public String getText(Dialect dialect) {
173-
return null;
174-
}
175-
176-
@Override
177-
public String getText() {
178-
return null;
179-
}
180-
181-
@Override
182-
public String getCustomReadExpression() {
183-
return null;
184-
}
185-
186-
@Override
187-
public String getCustomWriteExpression() {
188-
return null;
189-
}
190-
191134
@Override
192135
public JdbcMapping getJdbcMapping() {
193-
if ( type instanceof SqlExpressible ) {
194-
return ( (SqlExpressible) type ).getJdbcMapping();
136+
if ( type instanceof SqlExpressible sqlExpressible ) {
137+
return sqlExpressible.getJdbcMapping();
195138
}
196-
else if ( expressible instanceof SqlExpressible ) {
197-
return ( (SqlExpressible) expressible ).getJdbcMapping();
139+
else if ( expressible instanceof SqlExpressible sqlExpressible ) {
140+
return sqlExpressible.getJdbcMapping();
198141
}
199142
else {
200143
return null;
@@ -203,18 +146,17 @@ else if ( expressible instanceof SqlExpressible ) {
203146

204147
@Override
205148
public void applySqlSelections(DomainResultCreationState creationState) {
206-
final SqlAstCreationState sqlAstCreationState = creationState.getSqlAstCreationState();
207149
final JdbcMapping jdbcMapping = getJdbcMapping();
208-
sqlAstCreationState.getSqlExpressionResolver()
209-
.resolveSqlSelection(
210-
this,
211-
jdbcMapping != null
212-
? jdbcMapping.getJdbcJavaType()
213-
: type.getExpressibleJavaType(),
214-
null,
215-
sqlAstCreationState.getCreationContext()
216-
.getMappingMetamodel().getTypeConfiguration()
217-
);
150+
resolveSqlSelection( creationState,
151+
jdbcMapping == null ? type.getExpressibleJavaType() : jdbcMapping.getJdbcJavaType() );
152+
}
153+
154+
private SqlSelection resolveSqlSelection(DomainResultCreationState creationState, JavaType<?> javaType) {
155+
final SqlAstCreationState sqlAstCreationState = creationState.getSqlAstCreationState();
156+
final TypeConfiguration typeConfiguration =
157+
sqlAstCreationState.getCreationContext().getMappingMetamodel().getTypeConfiguration();
158+
return sqlAstCreationState.getSqlExpressionResolver()
159+
.resolveSqlSelection( this, javaType, null, typeConfiguration );
218160
}
219161

220162
@Override

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
*
2323
* @author Christian Beikov
2424
*/
25-
public class SelfRenderingOrderedSetAggregateFunctionSqlAstExpression extends SelfRenderingAggregateFunctionSqlAstExpression
25+
public class SelfRenderingOrderedSetAggregateFunctionSqlAstExpression<T>
26+
extends SelfRenderingAggregateFunctionSqlAstExpression<T>
2627
implements OrderedSetAggregateFunctionExpression {
2728

2829
private final List<SortSpecification> withinGroup;
@@ -33,7 +34,7 @@ public SelfRenderingOrderedSetAggregateFunctionSqlAstExpression(
3334
List<? extends SqlAstNode> sqlAstArguments,
3435
Predicate filter,
3536
List<SortSpecification> withinGroup,
36-
ReturnableType<?> type,
37+
ReturnableType<T> type,
3738
JdbcMappingContainer expressible) {
3839
super( functionName, renderer, sqlAstArguments, filter, type, expressible );
3940
this.withinGroup = withinGroup;

0 commit comments

Comments
 (0)