Skip to content

Commit 0a41a5d

Browse files
committed
clean up formatters and remove TypeConfigurationWrapperOptions
It's wrong to build a WrapperOptions from a TypeConfiguration
1 parent 626f9a7 commit 0a41a5d

13 files changed

+69
-173
lines changed

hibernate-core/src/main/java/org/hibernate/dialect/H2DurationIntervalSecondJdbcType.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,8 @@ public Class<?> getPreferredJavaTypeClass(WrapperOptions options) {
4545

4646
@Override
4747
public <T> JdbcLiteralFormatter<T> getJdbcLiteralFormatter(JavaType<T> javaType) {
48-
return (appender, value, dialect, wrapperOptions) -> dialect.appendIntervalLiteral(
49-
appender,
50-
javaType.unwrap(
51-
value,
52-
Duration.class,
53-
wrapperOptions
54-
)
55-
);
48+
return (appender, value, dialect, wrapperOptions) ->
49+
dialect.appendIntervalLiteral( appender, javaType.unwrap( value, Duration.class, wrapperOptions ) );
5650
}
5751

5852
@Override

hibernate-core/src/main/java/org/hibernate/dialect/OracleEnumJdbcType.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,11 @@ public int getDefaultSqlTypeCode() {
6363
public <T> JdbcLiteralFormatter<T> getJdbcLiteralFormatter(JavaType<T> javaType) {
6464
@SuppressWarnings("unchecked")
6565
final Class<? extends Enum<?>> enumClass = (Class<? extends Enum<?>>) javaType.getJavaType();
66-
return (appender, value, dialect, wrapperOptions)
67-
-> appender.appendSql( dialect.getEnumTypeDeclaration( enumClass )
68-
+ "." + ((Enum<?>) value).name() );
66+
return (appender, value, dialect, wrapperOptions) -> {
67+
appender.appendSql( dialect.getEnumTypeDeclaration( enumClass ) );
68+
appender.appendSql( '.' );
69+
appender.appendSql( ((Enum<?>) value).name() );
70+
};
6971
}
7072

7173
@Override

hibernate-core/src/main/java/org/hibernate/dialect/PostgreSQLEnumJdbcType.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,12 @@ public int getDefaultSqlTypeCode() {
6464
public <T> JdbcLiteralFormatter<T> getJdbcLiteralFormatter(JavaType<T> javaType) {
6565
@SuppressWarnings("unchecked")
6666
final Class<? extends Enum<?>> enumClass = (Class<? extends Enum<?>>) javaType.getJavaType();
67-
return (appender, value, dialect, wrapperOptions)
68-
-> appender.appendSql( "'" + ((Enum<?>) value).name() + "'::"
69-
+ dialect.getEnumTypeDeclaration( enumClass ) );
67+
return (appender, value, dialect, wrapperOptions) -> {
68+
appender.appendSql( "'" );
69+
appender.appendSql( ((Enum<?>) value).name() );
70+
appender.appendSql( "'::" );
71+
appender.appendSql( dialect.getEnumTypeDeclaration( enumClass ) );
72+
};
7073
}
7174

7275
@Override

hibernate-core/src/main/java/org/hibernate/dialect/PostgreSQLIntervalSecondJdbcType.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,8 @@ public JdbcType resolveIndicatedType(JdbcTypeIndicators indicators, JavaType<?>
7070

7171
@Override
7272
public <T> JdbcLiteralFormatter<T> getJdbcLiteralFormatter(JavaType<T> javaType) {
73-
return (appender, value, dialect, wrapperOptions) -> dialect.appendIntervalLiteral(
74-
appender,
75-
javaType.unwrap(
76-
value,
77-
Duration.class,
78-
wrapperOptions
79-
)
80-
);
73+
return (appender, value, dialect, wrapperOptions) ->
74+
dialect.appendIntervalLiteral( appender, javaType.unwrap( value, Duration.class, wrapperOptions ) );
8175
}
8276

8377
@Override

hibernate-core/src/main/java/org/hibernate/dialect/aggregate/AggregateSupport.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
/**
2525
* A set of operations providing support for aggregate column types
26-
* in a certain {@link Dialect SQL dialect}.
26+
* in a certain {@linkplain Dialect SQL dialect}.
2727
*
2828
* @since 6.2
2929
*/

hibernate-core/src/main/java/org/hibernate/dialect/aggregate/OracleAggregateSupport.java

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55
package org.hibernate.dialect.aggregate;
66

7+
import org.hibernate.HibernateException;
78
import org.hibernate.boot.model.naming.Identifier;
89
import org.hibernate.boot.model.relational.AuxiliaryDatabaseObject;
910
import org.hibernate.boot.model.relational.Namespace;
@@ -37,7 +38,6 @@
3738
import org.hibernate.type.descriptor.jdbc.StructJdbcType;
3839
import org.hibernate.type.descriptor.sql.DdlType;
3940
import org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry;
40-
import org.hibernate.type.internal.TypeConfigurationWrapperOptions;
4141
import org.hibernate.type.spi.TypeConfiguration;
4242

4343
import java.util.LinkedHashMap;
@@ -76,26 +76,15 @@ private OracleAggregateSupport(boolean checkConstraintSupport, JsonSupport jsonS
7676

7777
public static AggregateSupport valueOf(Dialect dialect) {
7878
final DatabaseVersion version = dialect.getVersion();
79-
switch ( version.getMajor() ) {
80-
case 12:
81-
case 13:
82-
case 14:
83-
case 15:
84-
case 16:
85-
case 17:
86-
return V12_INSTANCE;
87-
case 18:
88-
return V18_INSTANCE;
89-
case 19:
90-
case 20:
91-
return V19_INSTANCE;
92-
case 21:
93-
case 22:
94-
return V21_INSTANCE;
95-
}
96-
return version.isSameOrAfter( 23 )
97-
? OracleAggregateSupport.V23_INSTANCE
98-
: OracleAggregateSupport.LEGACY_INSTANCE;
79+
return switch ( version.getMajor() ) {
80+
case 12, 13, 14, 15, 16, 17 -> V12_INSTANCE;
81+
case 18 -> V18_INSTANCE;
82+
case 19, 20 -> V19_INSTANCE;
83+
case 21, 22 -> V21_INSTANCE;
84+
default -> version.isSameOrAfter( 23 )
85+
? OracleAggregateSupport.V23_INSTANCE
86+
: OracleAggregateSupport.LEGACY_INSTANCE;
87+
};
9988
}
10089

10190
@Override
@@ -132,7 +121,7 @@ public String aggregateComponentCustomReadExpression(
132121
final JdbcLiteralFormatter<Boolean> jdbcLiteralFormatter = (JdbcLiteralFormatter<Boolean>) column.getJdbcMapping().getJdbcType()
133122
.getJdbcLiteralFormatter( column.getJdbcMapping().getMappedJavaType() );
134123
final Dialect dialect = typeConfiguration.getCurrentBaseSqlTypeIndicators().getDialect();
135-
final WrapperOptions wrapperOptions = new TypeConfigurationWrapperOptions( typeConfiguration );
124+
final WrapperOptions wrapperOptions = getWrapperOptions( typeConfiguration );
136125
final String trueLiteral = jdbcLiteralFormatter.toJdbcLiteral( true, dialect, wrapperOptions );
137126
final String falseLiteral = jdbcLiteralFormatter.toJdbcLiteral( false, dialect, wrapperOptions );
138127
return template.replace(
@@ -242,7 +231,7 @@ public String aggregateComponentCustomReadExpression(
242231
final JdbcLiteralFormatter<Boolean> jdbcLiteralFormatter = (JdbcLiteralFormatter<Boolean>) column.getJdbcMapping().getJdbcType()
243232
.getJdbcLiteralFormatter( column.getJdbcMapping().getMappedJavaType() );
244233
final Dialect dialect = typeConfiguration.getCurrentBaseSqlTypeIndicators().getDialect();
245-
final WrapperOptions wrapperOptions = new TypeConfigurationWrapperOptions( typeConfiguration );
234+
final WrapperOptions wrapperOptions = getWrapperOptions( typeConfiguration );
246235
final String trueLiteral = jdbcLiteralFormatter.toJdbcLiteral( true, dialect, wrapperOptions );
247236
final String falseLiteral = jdbcLiteralFormatter.toJdbcLiteral( false, dialect, wrapperOptions );
248237
return template.replace(
@@ -318,6 +307,15 @@ public String aggregateComponentCustomReadExpression(
318307
throw new IllegalArgumentException( "Unsupported aggregate SQL type: " + aggregateColumnTypeCode );
319308
}
320309

310+
private static WrapperOptions getWrapperOptions(TypeConfiguration typeConfiguration) {
311+
try {
312+
return typeConfiguration.getSessionFactory().getWrapperOptions();
313+
}
314+
catch (HibernateException e) {
315+
return null;
316+
}
317+
}
318+
321319
private static String xmlExtractArguments(String aggregateParentReadExpression, String xpathFragment) {
322320
final String extractArguments;
323321
int separatorIndex;
@@ -433,7 +431,7 @@ private String jsonCustomWriteExpression(
433431
final JdbcLiteralFormatter<Boolean> jdbcLiteralFormatter = (JdbcLiteralFormatter<Boolean>) jdbcMapping.getJdbcType()
434432
.getJdbcLiteralFormatter( jdbcMapping.getMappedJavaType() );
435433
final Dialect dialect = typeConfiguration.getCurrentBaseSqlTypeIndicators().getDialect();
436-
final WrapperOptions wrapperOptions = new TypeConfigurationWrapperOptions( typeConfiguration );
434+
final WrapperOptions wrapperOptions = getWrapperOptions( typeConfiguration );
437435
final String trueLiteral = jdbcLiteralFormatter.toJdbcLiteral( true, dialect, wrapperOptions );
438436
final String falseLiteral = jdbcLiteralFormatter.toJdbcLiteral( false, dialect, wrapperOptions );
439437
return "decode(" + customWriteExpression + "," + trueLiteral + ",'true'," + falseLiteral + ",'false')";
@@ -458,7 +456,7 @@ private static String xmlCustomWriteExpression(String customWriteExpression, Jdb
458456
final JdbcLiteralFormatter<Boolean> jdbcLiteralFormatter = (JdbcLiteralFormatter<Boolean>) jdbcMapping.getJdbcType()
459457
.getJdbcLiteralFormatter( jdbcMapping.getMappedJavaType() );
460458
final Dialect dialect = typeConfiguration.getCurrentBaseSqlTypeIndicators().getDialect();
461-
final WrapperOptions wrapperOptions = new TypeConfigurationWrapperOptions( typeConfiguration );
459+
final WrapperOptions wrapperOptions = getWrapperOptions( typeConfiguration );
462460
final String trueLiteral = jdbcLiteralFormatter.toJdbcLiteral( true, dialect, wrapperOptions );
463461
final String falseLiteral = jdbcLiteralFormatter.toJdbcLiteral( false, dialect, wrapperOptions );
464462
return "decode(" + customWriteExpression + "," + trueLiteral + ",'true'," + falseLiteral + ",'false')";

hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JdbcLiteralFormatter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ public interface JdbcLiteralFormatter<T> extends Serializable {
3131
* @return the SQL literal as a string
3232
*/
3333
default String toJdbcLiteral(T value, Dialect dialect, WrapperOptions wrapperOptions) {
34-
final StringBuilder sb = new StringBuilder();
35-
appendJdbcLiteral( new StringBuilderSqlAppender( sb ), value, dialect, wrapperOptions );
36-
return sb.toString();
34+
final StringBuilder result = new StringBuilder();
35+
appendJdbcLiteral( new StringBuilderSqlAppender( result ), value, dialect, wrapperOptions );
36+
return result.toString();
3737
}
3838

3939
/**

hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JdbcType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ default <T> JavaType<T> getJdbcRecommendedJavaTypeMapping(
118118
*/
119119
// todo (6.0) : move to {@link org.hibernate.metamodel.mapping.JdbcMapping}?
120120
default <T> JdbcLiteralFormatter<T> getJdbcLiteralFormatter(JavaType<T> javaType) {
121-
return (appender, value, dialect, wrapperOptions) -> appender.appendSql( value.toString() );
121+
return (appender, value, dialect, wrapperOptions) ->
122+
appender.appendSql( value.toString() );
122123
}
123124

124125
/**

hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/internal/JdbcLiteralFormatterArray.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,10 @@ public JdbcLiteralFormatterArray(JavaType<T> javaType, JdbcLiteralFormatter<?> e
2323

2424
@Override
2525
public void appendJdbcLiteral(SqlAppender appender, Object value, Dialect dialect, WrapperOptions wrapperOptions) {
26-
dialect.appendArrayLiteral(
27-
appender,
28-
unwrap( value, Object[].class, wrapperOptions ),
29-
elementFormatter,
30-
wrapperOptions
31-
);
26+
dialect.appendArrayLiteral( appender, unwrapArray( value, wrapperOptions ), elementFormatter, wrapperOptions );
27+
}
28+
29+
private Object[] unwrapArray(Object value, WrapperOptions wrapperOptions) {
30+
return unwrap( value, Object[].class, wrapperOptions );
3231
}
3332
}

hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/internal/JdbcLiteralFormatterTemporal.java

Lines changed: 15 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -32,60 +32,28 @@ public JdbcLiteralFormatterTemporal(JavaType<T> javaType, TemporalType precision
3232
public void appendJdbcLiteral(SqlAppender appender, Object value, Dialect dialect, WrapperOptions options) {
3333
final TimeZone jdbcTimeZone = getJdbcTimeZone( options );
3434
// for performance reasons, avoid conversions if we can
35-
if ( value instanceof java.util.Date ) {
36-
dialect.appendDateTimeLiteral(
37-
appender,
38-
(java.util.Date) value,
39-
precision,
40-
jdbcTimeZone
41-
);
35+
if ( value instanceof java.util.Date date ) {
36+
dialect.appendDateTimeLiteral( appender, date, precision, jdbcTimeZone );
4237
}
43-
else if ( value instanceof java.util.Calendar ) {
44-
dialect.appendDateTimeLiteral(
45-
appender,
46-
(java.util.Calendar) value,
47-
precision,
48-
jdbcTimeZone
49-
);
38+
else if ( value instanceof java.util.Calendar calendar ) {
39+
dialect.appendDateTimeLiteral( appender, calendar, precision, jdbcTimeZone );
5040
}
51-
else if ( value instanceof TemporalAccessor ) {
52-
dialect.appendDateTimeLiteral(
53-
appender,
54-
(TemporalAccessor) value,
55-
precision,
56-
jdbcTimeZone
57-
);
41+
else if ( value instanceof TemporalAccessor temporalAccessor ) {
42+
dialect.appendDateTimeLiteral( appender, temporalAccessor, precision, jdbcTimeZone );
5843
}
5944
else {
60-
switch ( precision ) {
61-
case DATE:
62-
dialect.appendDateTimeLiteral(
63-
appender,
64-
unwrap( value, java.sql.Date.class, options ),
65-
precision,
66-
jdbcTimeZone
67-
);
68-
break;
69-
case TIME:
70-
dialect.appendDateTimeLiteral(
71-
appender,
72-
unwrap( value, java.sql.Time.class, options ),
73-
precision,
74-
jdbcTimeZone
75-
);
76-
break;
77-
default:
78-
dialect.appendDateTimeLiteral(
79-
appender,
80-
unwrap( value, java.util.Date.class, options ),
81-
precision,
82-
jdbcTimeZone
83-
);
84-
break;
85-
}
45+
dialect.appendDateTimeLiteral( appender, unwrap( value, options ), precision, jdbcTimeZone );
8646
}
8747
}
8848

49+
private java.util.Date unwrap(Object value, WrapperOptions options) {
50+
return switch ( precision ) {
51+
case DATE -> unwrap( value, java.sql.Date.class, options );
52+
case TIME -> unwrap( value, java.sql.Time.class, options );
53+
case TIMESTAMP -> unwrap( value, java.util.Date.class, options );
54+
};
55+
}
56+
8957
private static TimeZone getJdbcTimeZone(WrapperOptions options) {
9058
return options == null || options.getJdbcTimeZone() == null
9159
? TimeZone.getDefault()

0 commit comments

Comments
 (0)