Skip to content

Commit 7e11d7a

Browse files
committed
HHH-18496 Fixup some CI issues
1 parent f6ac53f commit 7e11d7a

File tree

6 files changed

+167
-74
lines changed

6 files changed

+167
-74
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
@@ -21,20 +21,7 @@
2121
import org.hibernate.boot.model.FunctionContributions;
2222
import org.hibernate.boot.model.TypeContributions;
2323
import org.hibernate.cfg.Environment;
24-
import org.hibernate.dialect.BooleanDecoder;
25-
import org.hibernate.dialect.DmlTargetColumnQualifierSupport;
26-
import org.hibernate.dialect.DatabaseVersion;
27-
import org.hibernate.dialect.Dialect;
28-
import org.hibernate.dialect.OracleBooleanJdbcType;
29-
import org.hibernate.dialect.OracleJdbcHelper;
30-
import org.hibernate.dialect.OracleJsonJdbcType;
31-
import org.hibernate.dialect.OracleReflectionStructJdbcType;
32-
import org.hibernate.dialect.OracleTypes;
33-
import org.hibernate.dialect.OracleUserDefinedTypeExporter;
34-
import org.hibernate.dialect.OracleXmlJdbcType;
35-
import org.hibernate.dialect.Replacer;
36-
import org.hibernate.dialect.RowLockStrategy;
37-
import org.hibernate.dialect.TimeZoneSupport;
24+
import org.hibernate.dialect.*;
3825
import org.hibernate.dialect.aggregate.AggregateSupport;
3926
import org.hibernate.dialect.aggregate.OracleAggregateSupport;
4027
import org.hibernate.dialect.function.CommonFunctionFactory;
@@ -102,9 +89,10 @@
10289
import org.hibernate.type.descriptor.java.PrimitiveByteArrayJavaType;
10390
import org.hibernate.type.descriptor.jdbc.BlobJdbcType;
10491
import org.hibernate.type.descriptor.jdbc.JdbcType;
105-
import org.hibernate.type.descriptor.jdbc.OracleJsonBlobJdbcType;
10692
import org.hibernate.type.descriptor.jdbc.NullJdbcType;
10793
import org.hibernate.type.descriptor.jdbc.ObjectNullAsNullTypeJdbcType;
94+
import org.hibernate.type.descriptor.jdbc.OracleJsonArrayBlobJdbcType;
95+
import org.hibernate.type.descriptor.jdbc.OracleJsonBlobJdbcType;
10896
import org.hibernate.type.descriptor.jdbc.SqlTypedJdbcType;
10997
import org.hibernate.type.descriptor.jdbc.spi.JdbcTypeRegistry;
11098
import org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl;
@@ -913,9 +901,11 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry
913901

914902
if ( getVersion().isSameOrAfter( 21 ) ) {
915903
typeContributions.contributeJdbcType( OracleJsonJdbcType.INSTANCE );
904+
typeContributions.contributeJdbcType( OracleJsonArrayJdbcType.INSTANCE );
916905
}
917906
else {
918907
typeContributions.contributeJdbcType( OracleJsonBlobJdbcType.INSTANCE );
908+
typeContributions.contributeJdbcType( OracleJsonArrayBlobJdbcType.INSTANCE );
919909
}
920910
}
921911

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
import org.hibernate.type.descriptor.jdbc.NullJdbcType;
9090
import org.hibernate.type.descriptor.jdbc.ObjectJdbcType;
9191
import org.hibernate.type.descriptor.jdbc.ObjectNullAsNullTypeJdbcType;
92+
import org.hibernate.type.descriptor.jdbc.OracleJsonArrayBlobJdbcType;
9293
import org.hibernate.type.descriptor.jdbc.OracleJsonBlobJdbcType;
9394
import org.hibernate.type.descriptor.jdbc.SqlTypedJdbcType;
9495
import org.hibernate.type.descriptor.jdbc.spi.JdbcTypeRegistry;
@@ -976,9 +977,11 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry
976977

977978
if ( getVersion().isSameOrAfter( 21 ) ) {
978979
typeContributions.contributeJdbcType( OracleJsonJdbcType.INSTANCE );
980+
typeContributions.contributeJdbcType( OracleJsonArrayJdbcType.INSTANCE );
979981
}
980982
else {
981983
typeContributions.contributeJdbcType( OracleJsonBlobJdbcType.INSTANCE );
984+
typeContributions.contributeJdbcType( OracleJsonArrayBlobJdbcType.INSTANCE );
982985
}
983986

984987
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: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import static org.hibernate.type.SqlTypes.ARRAY;
4242
import static org.hibernate.type.SqlTypes.BIGINT;
4343
import static org.hibernate.type.SqlTypes.BINARY;
44+
import static org.hibernate.type.SqlTypes.BIT;
4445
import static org.hibernate.type.SqlTypes.BLOB;
4546
import static org.hibernate.type.SqlTypes.BOOLEAN;
4647
import static org.hibernate.type.SqlTypes.CLOB;
@@ -132,6 +133,11 @@ public String aggregateComponentCustomReadExpression(
132133
parentPartExpression = aggregateParentReadExpression + ",'$.";
133134
}
134135
switch ( column.getTypeCode() ) {
136+
case BIT:
137+
return template.replace(
138+
placeholder,
139+
"decode(json_value(" + parentPartExpression + columnExpression + "'),'true',1,'false',0,null)"
140+
);
135141
case BOOLEAN:
136142
if ( column.getTypeName().toLowerCase( Locale.ROOT ).trim().startsWith( "number" ) ) {
137143
return template.replace(
@@ -266,6 +272,8 @@ private String jsonCustomWriteExpression(
266272
switch ( jdbcType.getElementJdbcType().getDefaultSqlTypeCode() ) {
267273
case CLOB:
268274
return "(select json_arrayagg(to_clob(t.column_value)) from table(" + customWriteExpression + ") t)";
275+
case BIT:
276+
return "decode(" + customWriteExpression + ",1,'true',0,'false',null)";
269277
case BOOLEAN:
270278
final String elementTypeName = determineElementTypeName( column.toSize(), pluralType, typeConfiguration );
271279
if ( elementTypeName.toLowerCase( Locale.ROOT ).trim().startsWith( "number" ) ) {
@@ -274,6 +282,9 @@ private String jsonCustomWriteExpression(
274282
default:
275283
break;
276284
}
285+
return customWriteExpression;
286+
case BIT:
287+
return "decode(" + customWriteExpression + ",1,'true',0,'false',null)";
277288
case BOOLEAN:
278289
final String sqlTypeName = AbstractSqlAstTranslator.getSqlTypeName( column, typeConfiguration );
279290
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
@@ -26,39 +26,26 @@
2626
*
2727
* @author Christian Beikov
2828
*/
29-
public class OracleJsonBlobJdbcType implements AggregateJdbcType {
29+
public class OracleJsonBlobJdbcType extends JsonJdbcType {
3030
/**
3131
* Singleton access
3232
*/
3333
public static final OracleJsonBlobJdbcType INSTANCE = new OracleJsonBlobJdbcType( null );
3434

35-
private final EmbeddableMappingType embeddableMappingType;
36-
3735
protected OracleJsonBlobJdbcType(EmbeddableMappingType embeddableMappingType) {
38-
this.embeddableMappingType = embeddableMappingType;
36+
super( embeddableMappingType );
3937
}
4038

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

46-
@Override
47-
public int getDefaultSqlTypeCode() {
48-
return SqlTypes.JSON;
49-
}
50-
5144
@Override
5245
public String toString() {
5346
return "JsonBlobJdbcType";
5447
}
5548

56-
@Override
57-
public <T> JdbcLiteralFormatter<T> getJdbcLiteralFormatter(JavaType<T> javaType) {
58-
// No literal support for now
59-
return null;
60-
}
61-
6249
@Override
6350
public String getCheckCondition(String columnName, JavaType<?> javaType, BasicValueConverter<?, ?> converter, Dialect dialect) {
6451
return columnName + " is json";
@@ -72,50 +59,6 @@ public AggregateJdbcType resolveAggregateJdbcType(
7259
return new OracleJsonBlobJdbcType( mappingType );
7360
}
7461

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

0 commit comments

Comments
 (0)