HHH-12856 Support of sequences on DB2400

This commit is contained in:
Pierrick Rouxel 2018-07-25 00:13:42 +02:00 committed by Andrea Boriero
parent d04a1fe3fd
commit 1c3b8a1c28
5 changed files with 56 additions and 2 deletions

View File

@ -270,6 +270,7 @@ If for some reason it is not able to determine the proper one or you want to use
|DB297 |Support for the DB2 database, version 9.7.
|DB2390 |Support for DB2 Universal Database for OS/390, also known as DB2/390.
|DB2400 |Support for DB2 Universal Database for iSeries, also known as DB2/400.
|DB2400V7R1 |Support for DB2 Universal Database for i, also known as DB2/400, version 7.1
|DerbyTenFive |Support for the Derby database, version 10.5
|DerbyTenSix |Support for the Derby database, version 10.6
|DerbyTenSeven |Support for the Derby database, version 10.7

View File

@ -28,6 +28,7 @@ import org.hibernate.dialect.Cache71Dialect;
import org.hibernate.dialect.DB2390Dialect;
import org.hibernate.dialect.DB2390V8Dialect;
import org.hibernate.dialect.DB2400Dialect;
import org.hibernate.dialect.DB2400V7R1Dialect;
import org.hibernate.dialect.DB2Dialect;
import org.hibernate.dialect.DerbyTenFiveDialect;
import org.hibernate.dialect.DerbyTenSevenDialect;
@ -202,6 +203,7 @@ public class StrategySelectorBuilder {
addDialect( strategySelector, DB2390Dialect.class );
addDialect( strategySelector, DB2390V8Dialect.class );
addDialect( strategySelector, DB2400Dialect.class );
addDialect( strategySelector, DB2400V7R1Dialect.class );
addDialect( strategySelector, DerbyTenFiveDialect.class );
addDialect( strategySelector, DerbyTenSixDialect.class );
addDialect( strategySelector, DerbyTenSevenDialect.class );

View File

@ -0,0 +1,42 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.dialect;
import org.hibernate.dialect.unique.DefaultUniqueDelegate;
import org.hibernate.dialect.unique.UniqueDelegate;
/**
* An SQL dialect for i. This class provides support for DB2 Universal Database for i V7R1 and
* later, also known as DB2/400.
*
* @author Pierrick Rouxel (pierrickrouxel)
*/
public class DB2400V7R1Dialect extends DB2Dialect {
private final UniqueDelegate uniqueDelegate;
public DB2400V7R1Dialect() {
super();
uniqueDelegate = new DefaultUniqueDelegate(this);
}
@Override
public UniqueDelegate getUniqueDelegate() {
return uniqueDelegate;
}
@Override
public String getForUpdateString() {
return " for update with rs";
}
@Override
public String getQuerySequencesString() {
return "select seqname from qsys2.syssequences";
}
}

View File

@ -47,7 +47,7 @@ public enum Database {
DB2 {
@Override
public Class<? extends Dialect> latestDialect() {
return DB2400Dialect.class;
return DB2400V7R1Dialect.class;
}
@Override
@ -55,7 +55,15 @@ public enum Database {
final String databaseName = info.getDatabaseName();
if ( "DB2 UDB for AS/400".equals( databaseName ) ) {
return new DB2400Dialect();
final int majorVersion = info.getDatabaseMajorVersion();
final int minorVersion = info.getDatabaseMinorVersion();
if ( majorVersion > 7 || ( majorVersion == 7 && minorVersion >= 1 ) ) {
return latestDialectInstance( this );
}
else {
return new DB2400Dialect();
}
}
if ( databaseName.startsWith( "DB2/" ) ) {

View File

@ -153,6 +153,7 @@ public class DialectFactoryTest extends BaseUnitTestCase {
testDetermination( "DB2/LINUX390", DB2Dialect.class, resolver );
testDetermination( "DB2/AIX64", DB2Dialect.class, resolver );
testDetermination( "DB2 UDB for AS/400", DB2400Dialect.class, resolver );
testDetermination( "DB2 UDB for AS/400", 7, 1, DB2400V7R1Dialect.class, resolver );
testDetermination( "Oracle", 8, Oracle8iDialect.class, resolver );
testDetermination( "Oracle", 9, Oracle9iDialect.class, resolver );
testDetermination( "Oracle", 10, Oracle10gDialect.class, resolver );