Skip to content

Commit 8be0746

Browse files
committed
HHH-16311 - Migrate away from UserType for enum handling
- work on Oracle failure
1 parent fdff276 commit 8be0746

File tree

1 file changed

+0
-135
lines changed

1 file changed

+0
-135
lines changed

hibernate-core/src/main/java/org/hibernate/type/BasicArrayType.java

-135
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,9 @@
66
*/
77
package org.hibernate.type;
88

9-
import java.lang.reflect.Array;
10-
import java.sql.CallableStatement;
11-
import java.sql.PreparedStatement;
12-
import java.sql.ResultSet;
13-
import java.sql.SQLException;
14-
15-
import org.hibernate.type.descriptor.converter.spi.BasicValueConverter;
16-
import org.hibernate.type.descriptor.ValueBinder;
17-
import org.hibernate.type.descriptor.ValueExtractor;
18-
import org.hibernate.type.descriptor.WrapperOptions;
199
import org.hibernate.type.descriptor.java.JavaType;
20-
import org.hibernate.type.descriptor.jdbc.JdbcLiteralFormatter;
2110
import org.hibernate.type.descriptor.jdbc.JdbcType;
2211
import org.hibernate.type.descriptor.jdbc.JdbcTypeIndicators;
23-
import org.hibernate.type.descriptor.jdbc.internal.JdbcLiteralFormatterArray;
24-
import org.hibernate.type.spi.TypeConfiguration;
2512

2613
/**
2714
* A type that maps between {@link java.sql.Types#ARRAY ARRAY} and {@code T[]}
@@ -35,118 +22,11 @@ public class BasicArrayType<T>
3522

3623
private final BasicType<T> baseDescriptor;
3724
private final String name;
38-
private final ValueBinder<T[]> jdbcValueBinder;
39-
private final ValueExtractor<T[]> jdbcValueExtractor;
40-
private final JdbcLiteralFormatter<T[]> jdbcLiteralFormatter;
4125

4226
public BasicArrayType(BasicType<T> baseDescriptor, JdbcType arrayJdbcType, JavaType<T[]> arrayTypeDescriptor) {
4327
super( arrayJdbcType, arrayTypeDescriptor );
4428
this.baseDescriptor = baseDescriptor;
4529
this.name = baseDescriptor.getName() + "[]";
46-
final ValueBinder<T[]> jdbcValueBinder = super.getJdbcValueBinder();
47-
final ValueExtractor<T[]> jdbcValueExtractor = super.getJdbcValueExtractor();
48-
final JdbcLiteralFormatter jdbcLiteralFormatter = super.getJdbcLiteralFormatter();
49-
//noinspection unchecked
50-
final BasicValueConverter<T, Object> valueConverter = (BasicValueConverter<T, Object>) baseDescriptor.getValueConverter();
51-
if ( valueConverter != null ) {
52-
this.jdbcValueBinder = new ValueBinder<>() {
53-
@Override
54-
public void bind(PreparedStatement st, T[] value, int index, WrapperOptions options)
55-
throws SQLException {
56-
jdbcValueBinder.bind( st, getValue( value, valueConverter, options ), index, options );
57-
}
58-
59-
@Override
60-
public void bind(CallableStatement st, T[] value, String name, WrapperOptions options)
61-
throws SQLException {
62-
jdbcValueBinder.bind( st, getValue( value, valueConverter, options ), name, options );
63-
}
64-
65-
private T[] getValue(
66-
T[] value,
67-
BasicValueConverter<T, Object> valueConverter,
68-
WrapperOptions options) {
69-
if ( value == null ) {
70-
return null;
71-
}
72-
final JdbcType elementJdbcType = baseDescriptor.getJdbcType();
73-
final TypeConfiguration typeConfiguration = options.getSessionFactory().getTypeConfiguration();
74-
final JdbcType underlyingJdbcType = typeConfiguration.getJdbcTypeRegistry()
75-
.getDescriptor( elementJdbcType.getDefaultSqlTypeCode() );
76-
final Class<?> preferredJavaTypeClass = underlyingJdbcType.getPreferredJavaTypeClass( options );
77-
final Class<?> elementJdbcJavaTypeClass;
78-
if ( preferredJavaTypeClass == null ) {
79-
elementJdbcJavaTypeClass = underlyingJdbcType.getJdbcRecommendedJavaTypeMapping(
80-
null,
81-
null,
82-
typeConfiguration
83-
).getJavaTypeClass();
84-
}
85-
else {
86-
elementJdbcJavaTypeClass = preferredJavaTypeClass;
87-
}
88-
89-
if ( value.getClass().getComponentType() == elementJdbcJavaTypeClass ) {
90-
return value;
91-
}
92-
final Object[] array = (Object[]) Array.newInstance( elementJdbcJavaTypeClass, value.length );
93-
for ( int i = 0; i < value.length; i++ ) {
94-
array[i] = valueConverter.getRelationalJavaType().unwrap(
95-
valueConverter.toRelationalValue( value[i] ),
96-
elementJdbcJavaTypeClass,
97-
options
98-
);
99-
}
100-
//noinspection unchecked
101-
return (T[]) array;
102-
}
103-
};
104-
this.jdbcValueExtractor = new ValueExtractor<T[]>() {
105-
@Override
106-
public T[] extract(ResultSet rs, int paramIndex, WrapperOptions options) throws SQLException {
107-
return getValue( jdbcValueExtractor.extract( rs, paramIndex, options ), valueConverter );
108-
}
109-
110-
@Override
111-
public T[] extract(CallableStatement statement, int paramIndex, WrapperOptions options)
112-
throws SQLException {
113-
return getValue( jdbcValueExtractor.extract( statement, paramIndex, options ), valueConverter );
114-
}
115-
116-
@Override
117-
public T[] extract(CallableStatement statement, String paramName, WrapperOptions options)
118-
throws SQLException {
119-
return getValue( jdbcValueExtractor.extract( statement, paramName, options ), valueConverter );
120-
}
121-
122-
private T[] getValue(T[] value, BasicValueConverter<T, Object> valueConverter) {
123-
if ( value == null ) {
124-
return null;
125-
}
126-
if ( value.getClass().getComponentType() == valueConverter.getDomainJavaType().getJavaTypeClass() ) {
127-
return value;
128-
}
129-
//noinspection unchecked
130-
final T[] array = (T[]) Array.newInstance(
131-
valueConverter.getDomainJavaType().getJavaTypeClass(),
132-
value.length
133-
);
134-
for ( int i = 0; i < value.length; i++ ) {
135-
array[i] = valueConverter.toDomainValue( value[i] );
136-
}
137-
return array;
138-
}
139-
};
140-
this.jdbcLiteralFormatter = new JdbcLiteralFormatterArray(
141-
baseDescriptor.getJavaTypeDescriptor(),
142-
jdbcLiteralFormatter
143-
);
144-
}
145-
else {
146-
this.jdbcValueBinder = jdbcValueBinder;
147-
this.jdbcValueExtractor = jdbcValueExtractor;
148-
this.jdbcLiteralFormatter = jdbcLiteralFormatter;
149-
}
15030
}
15131

15232
@Override
@@ -164,21 +44,6 @@ protected boolean registerUnderJavaType() {
16444
return true;
16545
}
16646

167-
@Override
168-
public ValueExtractor<T[]> getJdbcValueExtractor() {
169-
return jdbcValueExtractor;
170-
}
171-
172-
@Override
173-
public ValueBinder<T[]> getJdbcValueBinder() {
174-
return jdbcValueBinder;
175-
}
176-
177-
@Override
178-
public JdbcLiteralFormatter getJdbcLiteralFormatter() {
179-
return jdbcLiteralFormatter;
180-
}
181-
18247
@Override
18348
public <X> BasicType<X> resolveIndicatedType(JdbcTypeIndicators indicators, JavaType<X> domainJtd) {
18449
// TODO: maybe fallback to some encoding by default if the DB doesn't support arrays natively?

0 commit comments

Comments
 (0)