Skip to content

Commit 1c37544

Browse files
committed
[#1532] change to Oracle12cDialect, fix oracle test container datatypes and oracle createInsert() sql
1 parent acb15ed commit 1c37544

File tree

3 files changed

+32
-8
lines changed

3 files changed

+32
-8
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/id/insert/ReactiveAbstractReturningDelegate.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.hibernate.dialect.DB2Dialect;
1313
import org.hibernate.dialect.Dialect;
1414
import org.hibernate.dialect.MySQLDialect;
15+
import org.hibernate.dialect.Oracle12cDialect;
1516
import org.hibernate.dialect.SQLServerDialect;
1617
import org.hibernate.engine.jdbc.mutation.JdbcValueBindings;
1718
import org.hibernate.engine.jdbc.mutation.group.PreparedStatementDetails;
@@ -98,6 +99,24 @@ private static String createInsert(PreparedStatementDetails insertStatementDetai
9899
// Correct : select id from new table ( insert into LongTypeEntity (id) values (default))
99100
return insertStatementDetails.getSqlString().replace( " values ( ))", " (" + identifierColumnName + ") values (default))" );
100101
}
102+
if( dialect instanceof Oracle12cDialect ) {
103+
final String valuesStr = " values ( )";
104+
String sql = insertStatementDetails.getSqlString();
105+
int index = sql.lastIndexOf( sqlEnd );
106+
// remove "returning id" since it's added via
107+
if ( index > -1 ) {
108+
sql = sql.substring( 0, index );
109+
}
110+
111+
// Oracle is expecting values (default)
112+
if ( sql.endsWith( valuesStr ) ) {
113+
index = sql.lastIndexOf( valuesStr );
114+
sql = sql.substring( 0, index );
115+
sql = sql + " values (default)";
116+
}
117+
118+
return sql;
119+
}
101120
return insertStatementDetails.getSqlString();
102121
}
103122

hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/NoJdbcEnvironmentInitiator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import org.hibernate.dialect.Dialect;
1717
import org.hibernate.dialect.MariaDBDialect;
1818
import org.hibernate.dialect.MySQLDialect;
19-
import org.hibernate.dialect.OracleDialect;
19+
import org.hibernate.dialect.Oracle12cDialect;
2020
import org.hibernate.dialect.PostgreSQLDialect;
2121
import org.hibernate.dialect.SQLServerDialect;
2222
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
@@ -144,7 +144,7 @@ protected Class<? extends Dialect> guessDialect(String url) {
144144
return SQLServerDialect.class;
145145
}
146146
if ( url.startsWith( "oracle:" ) ) {
147-
return OracleDialect.class;
147+
return Oracle12cDialect.class;
148148
}
149149

150150
return null;

hibernate-reactive-core/src/test/java/org/hibernate/reactive/containers/OracleDatabase.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
import java.util.TimeZone;
2323
import java.util.UUID;
2424

25+
26+
import org.hibernate.type.NumericBooleanConverter;
27+
import org.hibernate.type.TrueFalseConverter;
28+
import org.hibernate.type.YesNoConverter;
29+
2530
import org.testcontainers.containers.OracleContainer;
2631

2732
import static org.hibernate.reactive.containers.DockerImage.imageName;
@@ -43,10 +48,10 @@ class OracleDatabase implements TestableDatabase {
4348
expectedDBTypeForClass.put( Boolean.class, "NUMBER" );
4449

4550
// FIXME: [ORM-6] Check if we need alternatives
46-
// expectedDBTypeForClass.put( NumericBooleanType.class, "NUMBER" );
47-
// expectedDBTypeForClass.put( TrueFalseType.class, "CHAR" );
48-
// expectedDBTypeForClass.put( YesNoType.class, "CHAR" );
49-
// expectedDBTypeForClass.put( PrimitiveByteArrayTypeDescriptor.class, "BLOB" );
51+
expectedDBTypeForClass.put( NumericBooleanConverter.class, "NUMBER" );
52+
expectedDBTypeForClass.put( YesNoConverter.class, "CHAR" );
53+
expectedDBTypeForClass.put( TrueFalseConverter.class, "CHAR" );
54+
expectedDBTypeForClass.put( byte[].class, "RAW" );
5055
// expectedDBTypeForClass.put( TextType.class, "VARCHAR2" );
5156

5257
expectedDBTypeForClass.put( int.class, "NUMBER" );
@@ -63,9 +68,9 @@ class OracleDatabase implements TestableDatabase {
6368
expectedDBTypeForClass.put( TimeZone.class, "VARCHAR2" );
6469
expectedDBTypeForClass.put( Date.class, "DATE" );
6570
expectedDBTypeForClass.put( Timestamp.class, "TIMESTAMP(6)" );
66-
expectedDBTypeForClass.put( Time.class, "DATE" );
71+
expectedDBTypeForClass.put( Time.class, "TIMESTAMP(6)" );
6772
expectedDBTypeForClass.put( LocalDate.class, "DATE" );
68-
expectedDBTypeForClass.put( LocalTime.class, "TIMESTAMP(6)" );
73+
expectedDBTypeForClass.put( LocalTime.class, "DATE" );
6974
expectedDBTypeForClass.put( LocalDateTime.class, "TIMESTAMP(6)" );
7075
expectedDBTypeForClass.put( BigInteger.class, "NUMBER" );
7176
expectedDBTypeForClass.put( BigDecimal.class, "NUMBER" );

0 commit comments

Comments
 (0)