Skip to content

Commit 9a6ab64

Browse files
committed
HHH-18496 Fixup some CI issues
1 parent a694e5f commit 9a6ab64

File tree

6 files changed

+166
-76
lines changed

6 files changed

+166
-76
lines changed

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/OracleLegacyDialect.java

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,7 @@
2323
import org.hibernate.boot.model.FunctionContributions;
2424
import org.hibernate.boot.model.TypeContributions;
2525
import org.hibernate.cfg.Environment;
26-
import org.hibernate.dialect.BooleanDecoder;
27-
import org.hibernate.dialect.DmlTargetColumnQualifierSupport;
28-
import org.hibernate.dialect.DatabaseVersion;
29-
import org.hibernate.dialect.Dialect;
30-
import org.hibernate.dialect.OracleBooleanJdbcType;
31-
import org.hibernate.dialect.OracleJdbcHelper;
32-
import org.hibernate.dialect.OracleJsonJdbcType;
33-
import org.hibernate.dialect.OracleReflectionStructJdbcType;
34-
import org.hibernate.dialect.OracleTypes;
35-
import org.hibernate.dialect.OracleUserDefinedTypeExporter;
36-
import org.hibernate.dialect.OracleXmlJdbcType;
37-
import org.hibernate.dialect.Replacer;
38-
import org.hibernate.dialect.RowLockStrategy;
39-
import org.hibernate.dialect.TimeZoneSupport;
26+
import org.hibernate.dialect.*;
4027
import org.hibernate.dialect.aggregate.AggregateSupport;
4128
import org.hibernate.dialect.aggregate.OracleAggregateSupport;
4229
import org.hibernate.dialect.function.CommonFunctionFactory;
@@ -104,9 +91,10 @@
10491
import org.hibernate.type.descriptor.java.PrimitiveByteArrayJavaType;
10592
import org.hibernate.type.descriptor.jdbc.BlobJdbcType;
10693
import org.hibernate.type.descriptor.jdbc.JdbcType;
107-
import org.hibernate.type.descriptor.jdbc.OracleJsonBlobJdbcType;
10894
import org.hibernate.type.descriptor.jdbc.NullJdbcType;
10995
import org.hibernate.type.descriptor.jdbc.ObjectNullAsNullTypeJdbcType;
96+
import org.hibernate.type.descriptor.jdbc.OracleJsonArrayBlobJdbcType;
97+
import org.hibernate.type.descriptor.jdbc.OracleJsonBlobJdbcType;
11098
import org.hibernate.type.descriptor.jdbc.SqlTypedJdbcType;
11199
import org.hibernate.type.descriptor.jdbc.spi.JdbcTypeRegistry;
112100
import org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl;
@@ -902,9 +890,11 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry
902890

903891
if ( getVersion().isSameOrAfter( 21 ) ) {
904892
typeContributions.contributeJdbcType( OracleJsonJdbcType.INSTANCE );
893+
typeContributions.contributeJdbcType( OracleJsonArrayJdbcType.INSTANCE );
905894
}
906895
else {
907896
typeContributions.contributeJdbcType( OracleJsonBlobJdbcType.INSTANCE );
897+
typeContributions.contributeJdbcType( OracleJsonArrayBlobJdbcType.INSTANCE );
908898
}
909899
}
910900

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,6 @@
4848
import org.hibernate.exception.spi.SQLExceptionConversionDelegate;
4949
import org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor;
5050
import org.hibernate.exception.spi.ViolatedConstraintNameExtractor;
51-
import org.hibernate.internal.util.JdbcExceptionHelper;
52-
import org.hibernate.internal.util.StringHelper;
5351
import org.hibernate.internal.util.config.ConfigurationHelper;
5452
import org.hibernate.mapping.UserDefinedType;
5553
import org.hibernate.mapping.CheckConstraint;
@@ -93,6 +91,7 @@
9391
import org.hibernate.type.descriptor.jdbc.NullJdbcType;
9492
import org.hibernate.type.descriptor.jdbc.ObjectJdbcType;
9593
import org.hibernate.type.descriptor.jdbc.ObjectNullAsNullTypeJdbcType;
94+
import org.hibernate.type.descriptor.jdbc.OracleJsonArrayBlobJdbcType;
9695
import org.hibernate.type.descriptor.jdbc.OracleJsonBlobJdbcType;
9796
import org.hibernate.type.descriptor.jdbc.SqlTypedJdbcType;
9897
import org.hibernate.type.descriptor.jdbc.spi.JdbcTypeRegistry;
@@ -972,9 +971,11 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry
972971

973972
if ( getVersion().isSameOrAfter( 21 ) ) {
974973
typeContributions.contributeJdbcType( OracleJsonJdbcType.INSTANCE );
974+
typeContributions.contributeJdbcType( OracleJsonArrayJdbcType.INSTANCE );
975975
}
976976
else {
977977
typeContributions.contributeJdbcType( OracleJsonBlobJdbcType.INSTANCE );
978+
typeContributions.contributeJdbcType( OracleJsonArrayBlobJdbcType.INSTANCE );
978979
}
979980

980981
if ( OracleJdbcHelper.isUsable( serviceRegistry ) ) {
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
5+
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
6+
*/
7+
package org.hibernate.dialect;
8+
9+
import org.hibernate.type.descriptor.converter.spi.BasicValueConverter;
10+
import org.hibernate.type.descriptor.java.JavaType;
11+
import org.hibernate.type.descriptor.jdbc.OracleJsonArrayBlobJdbcType;
12+
13+
/**
14+
* Specialized type mapping for {@code JSON} and the JSON SQL data type for Oracle.
15+
*
16+
* @author Christian Beikov
17+
*/
18+
public class OracleJsonArrayJdbcType extends OracleJsonArrayBlobJdbcType {
19+
/**
20+
* Singleton access
21+
*/
22+
public static final OracleJsonArrayJdbcType INSTANCE = new OracleJsonArrayJdbcType();
23+
24+
private OracleJsonArrayJdbcType() {
25+
}
26+
27+
@Override
28+
public String toString() {
29+
return "OracleJsonJdbcType";
30+
}
31+
32+
@Override
33+
public String getCheckCondition(String columnName, JavaType<?> javaType, BasicValueConverter<?, ?> converter, Dialect dialect) {
34+
// No check constraint necessary, because the JSON DDL type is already OSON encoded
35+
return null;
36+
}
37+
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import static org.hibernate.type.SqlTypes.ARRAY;
4444
import static org.hibernate.type.SqlTypes.BIGINT;
4545
import static org.hibernate.type.SqlTypes.BINARY;
46+
import static org.hibernate.type.SqlTypes.BIT;
4647
import static org.hibernate.type.SqlTypes.BLOB;
4748
import static org.hibernate.type.SqlTypes.BOOLEAN;
4849
import static org.hibernate.type.SqlTypes.CLOB;
@@ -134,6 +135,11 @@ public String aggregateComponentCustomReadExpression(
134135
parentPartExpression = aggregateParentReadExpression + ",'$.";
135136
}
136137
switch ( column.getTypeCode() ) {
138+
case BIT:
139+
return template.replace(
140+
placeholder,
141+
"decode(json_value(" + parentPartExpression + columnExpression + "'),'true',1,'false',0,null)"
142+
);
137143
case BOOLEAN:
138144
if ( column.getTypeName().toLowerCase( Locale.ROOT ).trim().startsWith( "number" ) ) {
139145
return template.replace(
@@ -268,6 +274,8 @@ private String jsonCustomWriteExpression(
268274
switch ( jdbcType.getElementJdbcType().getDefaultSqlTypeCode() ) {
269275
case CLOB:
270276
return "(select json_arrayagg(to_clob(t.column_value)) from table(" + customWriteExpression + ") t)";
277+
case BIT:
278+
return "decode(" + customWriteExpression + ",1,'true',0,'false',null)";
271279
case BOOLEAN:
272280
final String elementTypeName = determineElementTypeName( column.toSize(), pluralType, typeConfiguration );
273281
if ( elementTypeName.toLowerCase( Locale.ROOT ).trim().startsWith( "number" ) ) {
@@ -276,6 +284,8 @@ private String jsonCustomWriteExpression(
276284
default:
277285
break;
278286
}
287+
case BIT:
288+
return "decode(" + customWriteExpression + ",1,'true',0,'false',null)";
279289
case BOOLEAN:
280290
final String sqlTypeName = AbstractSqlAstTranslator.getSqlTypeName( column, typeConfiguration );
281291
if ( sqlTypeName.toLowerCase( Locale.ROOT ).trim().startsWith( "number" ) ) {
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
5+
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
6+
*/
7+
package org.hibernate.type.descriptor.jdbc;
8+
9+
import org.hibernate.dialect.Dialect;
10+
import org.hibernate.type.SqlTypes;
11+
import org.hibernate.type.descriptor.ValueBinder;
12+
import org.hibernate.type.descriptor.ValueExtractor;
13+
import org.hibernate.type.descriptor.WrapperOptions;
14+
import org.hibernate.type.descriptor.converter.spi.BasicValueConverter;
15+
import org.hibernate.type.descriptor.java.JavaType;
16+
17+
import java.nio.charset.StandardCharsets;
18+
import java.sql.CallableStatement;
19+
import java.sql.PreparedStatement;
20+
import java.sql.ResultSet;
21+
import java.sql.SQLException;
22+
23+
/**
24+
* Specialized type mapping for {@code JSON} and the BLOB SQL data type for Oracle.
25+
*
26+
* @author Christian Beikov
27+
*/
28+
public class OracleJsonArrayBlobJdbcType extends JsonArrayJdbcType {
29+
/**
30+
* Singleton access
31+
*/
32+
public static final OracleJsonArrayBlobJdbcType INSTANCE = new OracleJsonArrayBlobJdbcType();
33+
34+
protected OracleJsonArrayBlobJdbcType() {
35+
}
36+
37+
@Override
38+
public int getJdbcTypeCode() {
39+
return SqlTypes.BLOB;
40+
}
41+
42+
@Override
43+
public String toString() {
44+
return "JsonArrayBlobJdbcType";
45+
}
46+
47+
@Override
48+
public String getCheckCondition(String columnName, JavaType<?> javaType, BasicValueConverter<?, ?> converter, Dialect dialect) {
49+
return columnName + " is json";
50+
}
51+
52+
@Override
53+
public <X> ValueBinder<X> getBinder(JavaType<X> javaType) {
54+
return new BasicBinder<>( javaType, this ) {
55+
@Override
56+
protected void doBind(PreparedStatement st, X value, int index, WrapperOptions options)
57+
throws SQLException {
58+
final String json = OracleJsonArrayBlobJdbcType.this.toString(
59+
value,
60+
getJavaType(),
61+
options
62+
);
63+
st.setBytes( index, json.getBytes( StandardCharsets.UTF_8 ) );
64+
}
65+
66+
@Override
67+
protected void doBind(CallableStatement st, X value, String name, WrapperOptions options)
68+
throws SQLException {
69+
final String json = OracleJsonArrayBlobJdbcType.this.toString(
70+
value,
71+
getJavaType(),
72+
options
73+
);
74+
st.setBytes( name, json.getBytes( StandardCharsets.UTF_8 ) );
75+
}
76+
};
77+
}
78+
79+
@Override
80+
public <X> ValueExtractor<X> getExtractor(JavaType<X> javaType) {
81+
return new BasicExtractor<>( javaType, this ) {
82+
@Override
83+
protected X doExtract(ResultSet rs, int paramIndex, WrapperOptions options) throws SQLException {
84+
return fromString( rs.getBytes( paramIndex ), options );
85+
}
86+
87+
@Override
88+
protected X doExtract(CallableStatement statement, int index, WrapperOptions options) throws SQLException {
89+
return fromString( statement.getBytes( index ), options );
90+
}
91+
92+
@Override
93+
protected X doExtract(CallableStatement statement, String name, WrapperOptions options) throws SQLException {
94+
return fromString( statement.getBytes( name ), options );
95+
}
96+
97+
private X fromString(byte[] json, WrapperOptions options) throws SQLException {
98+
if ( json == null ) {
99+
return null;
100+
}
101+
return OracleJsonArrayBlobJdbcType.this.fromString(
102+
new String( json, StandardCharsets.UTF_8 ),
103+
getJavaType(),
104+
options
105+
);
106+
}
107+
};
108+
}
109+
}

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

Lines changed: 2 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -28,39 +28,26 @@
2828
*
2929
* @author Christian Beikov
3030
*/
31-
public class OracleJsonBlobJdbcType implements AggregateJdbcType {
31+
public class OracleJsonBlobJdbcType extends JsonJdbcType {
3232
/**
3333
* Singleton access
3434
*/
3535
public static final OracleJsonBlobJdbcType INSTANCE = new OracleJsonBlobJdbcType( null );
3636

37-
private final EmbeddableMappingType embeddableMappingType;
38-
3937
protected OracleJsonBlobJdbcType(EmbeddableMappingType embeddableMappingType) {
40-
this.embeddableMappingType = embeddableMappingType;
38+
super( embeddableMappingType );
4139
}
4240

4341
@Override
4442
public int getJdbcTypeCode() {
4543
return SqlTypes.BLOB;
4644
}
4745

48-
@Override
49-
public int getDefaultSqlTypeCode() {
50-
return SqlTypes.JSON;
51-
}
52-
5346
@Override
5447
public String toString() {
5548
return "JsonBlobJdbcType";
5649
}
5750

58-
@Override
59-
public <T> JdbcLiteralFormatter<T> getJdbcLiteralFormatter(JavaType<T> javaType) {
60-
// No literal support for now
61-
return null;
62-
}
63-
6451
@Override
6552
public String getCheckCondition(String columnName, JavaType<?> javaType, BasicValueConverter<?, ?> converter, Dialect dialect) {
6653
return columnName + " is json";
@@ -74,50 +61,6 @@ public AggregateJdbcType resolveAggregateJdbcType(
7461
return new OracleJsonBlobJdbcType( mappingType );
7562
}
7663

77-
@Override
78-
public EmbeddableMappingType getEmbeddableMappingType() {
79-
return embeddableMappingType;
80-
}
81-
82-
protected <X> X fromString(String string, JavaType<X> javaType, WrapperOptions options) throws SQLException {
83-
if ( embeddableMappingType != null ) {
84-
return JsonHelper.fromString(
85-
embeddableMappingType,
86-
string,
87-
javaType.getJavaTypeClass() != Object[].class,
88-
options
89-
);
90-
}
91-
return options.getSessionFactory().getFastSessionServices().getJsonFormatMapper().fromString(
92-
string,
93-
javaType,
94-
options
95-
);
96-
}
97-
98-
@Override
99-
public Object createJdbcValue(Object domainValue, WrapperOptions options) throws SQLException {
100-
assert embeddableMappingType != null;
101-
return JsonHelper.toString( embeddableMappingType, domainValue, options );
102-
}
103-
104-
@Override
105-
public Object[] extractJdbcValues(Object rawJdbcValue, WrapperOptions options) throws SQLException {
106-
assert embeddableMappingType != null;
107-
return JsonHelper.fromString( embeddableMappingType, (String) rawJdbcValue, false, options );
108-
}
109-
110-
protected <X> String toString(X value, JavaType<X> javaType, WrapperOptions options) {
111-
if ( embeddableMappingType != null ) {
112-
return JsonHelper.toString( embeddableMappingType, value, options );
113-
}
114-
return options.getSessionFactory().getFastSessionServices().getJsonFormatMapper().toString(
115-
value,
116-
javaType,
117-
options
118-
);
119-
}
120-
12164
@Override
12265
public <X> ValueBinder<X> getBinder(JavaType<X> javaType) {
12366
return new BasicBinder<>( javaType, this ) {

0 commit comments

Comments
 (0)