diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseNamesConstants.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseNamesConstants.java index 96dd7f8bfe..1010d47fd1 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseNamesConstants.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/DatabaseNamesConstants.java @@ -40,6 +40,7 @@ private DatabaseNamesConstants() { public final static String MSSQL2005 = "mssql2005"; public final static String MSSQL2008 = "mssql2008"; public final static String ORACLE = "oracle"; + public final static String ORACLE122 = "oracle122"; public final static String MYSQL = "mysql"; public final static String DB2 = "db2"; public final static String DB2ZOS = "db2zos"; diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/DdlBuilderFactory.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/DdlBuilderFactory.java index 60d9f44230..67081981ec 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/DdlBuilderFactory.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/DdlBuilderFactory.java @@ -37,6 +37,7 @@ import org.jumpmind.db.platform.mssql.MsSql2008DdlBuilder; import org.jumpmind.db.platform.mysql.MySqlDdlBuilder; import org.jumpmind.db.platform.nuodb.NuoDbDdlBuilder; +import org.jumpmind.db.platform.oracle.Oracle122DdlBuilder; import org.jumpmind.db.platform.oracle.OracleDdlBuilder; import org.jumpmind.db.platform.postgresql.PostgreSqlDdlBuilder; import org.jumpmind.db.platform.redshift.RedshiftDdlBuilder; @@ -87,6 +88,8 @@ public static final IDdlBuilder createDdlBuilder(String databaseName) { return new MySqlDdlBuilder(); } else if (DatabaseNamesConstants.ORACLE.equalsIgnoreCase(databaseName)) { return new OracleDdlBuilder(); + } else if (DatabaseNamesConstants.ORACLE122.equalsIgnoreCase(databaseName)) { + return new Oracle122DdlBuilder(); } else if (DatabaseNamesConstants.POSTGRESQL.equalsIgnoreCase(databaseName) || DatabaseNamesConstants.POSTGRESQL95.equalsIgnoreCase(databaseName)) { return new PostgreSqlDdlBuilder(); diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/oracle/Oracle122DdlBuilder.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/oracle/Oracle122DdlBuilder.java new file mode 100644 index 0000000000..a72b64b009 --- /dev/null +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/oracle/Oracle122DdlBuilder.java @@ -0,0 +1,9 @@ +package org.jumpmind.db.platform.oracle; + +public class Oracle122DdlBuilder extends OracleDdlBuilder { + + public Oracle122DdlBuilder() { + super(); + databaseInfo.setMaxIdentifierLength(128); + } +} diff --git a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbExport.java b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbExport.java index cadb7f2455..44a5782543 100644 --- a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbExport.java +++ b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/DbExport.java @@ -64,7 +64,7 @@ public enum Format { }; public enum Compatible { - DB2, DB2ZOS, DERBY, FIREBIRD, FIREBIRD_DIALECT1, GREENPLUM, H2, HSQLDB, HSQLDB2, INFORMIX, INTERBASE, MSSQL, MSSQL2000, MSSQL2005, MSSQL2008, MYSQL, ORACLE, POSTGRES, POSTGRES95, SYBASE, SQLITE, MARIADB, ASE, SQLANYWHERE, REDSHIFT, VOLTDB, NUODB, TIBERO, GENERIC + DB2, DB2ZOS, DERBY, FIREBIRD, FIREBIRD_DIALECT1, GREENPLUM, H2, HSQLDB, HSQLDB2, INFORMIX, INTERBASE, MSSQL, MSSQL2000, MSSQL2005, MSSQL2008, MYSQL, ORACLE, ORACLE122, POSTGRES, POSTGRES95, SYBASE, SQLITE, MARIADB, ASE, SQLANYWHERE, REDSHIFT, VOLTDB, NUODB, TIBERO, GENERIC }; private Format format = Format.SQL; diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/JdbcDatabasePlatformFactory.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/JdbcDatabasePlatformFactory.java index ebca5caf2a..c28483386f 100644 --- a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/JdbcDatabasePlatformFactory.java +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/JdbcDatabasePlatformFactory.java @@ -54,6 +54,7 @@ import org.jumpmind.db.platform.mssql.MsSql2008DatabasePlatform; import org.jumpmind.db.platform.mysql.MySqlDatabasePlatform; import org.jumpmind.db.platform.nuodb.NuoDbDatabasePlatform; +import org.jumpmind.db.platform.oracle.Oracle122DatabasePlatform; import org.jumpmind.db.platform.oracle.OracleDatabasePlatform; import org.jumpmind.db.platform.postgresql.PostgreSql95DatabasePlatform; import org.jumpmind.db.platform.postgresql.PostgreSqlDatabasePlatform; @@ -107,6 +108,7 @@ public class JdbcDatabasePlatformFactory { addPlatform(platforms, "microsoft sql server", MsSql2008DatabasePlatform.class); addPlatform(platforms, "MySQL", MySqlDatabasePlatform.class); addPlatform(platforms, "Oracle", OracleDatabasePlatform.class); + addPlatform(platforms, DatabaseNamesConstants.ORACLE122, Oracle122DatabasePlatform.class); addPlatform(platforms, "PostgreSql", PostgreSqlDatabasePlatform.class); addPlatform(platforms, DatabaseNamesConstants.POSTGRESQL95, PostgreSql95DatabasePlatform.class); addPlatform(platforms, "Adaptive Server Enterprise", AseDatabasePlatform.class); @@ -282,6 +284,14 @@ public static String[] determineDatabaseNameVersionSubprotocol(DataSource dataSo } } + if(nameVersion[0].equalsIgnoreCase(DatabaseNamesConstants.ORACLE)) { + int majorVersion = Integer.valueOf(metaData.getDatabaseMajorVersion()); + int minorVersion = Integer.valueOf(metaData.getDatabaseMinorVersion()); + if(majorVersion > 12 || (majorVersion == 12 && minorVersion >= 2)) { + nameVersion[0] = DatabaseNamesConstants.ORACLE122; + } + } + log.info("Detected database '" + nameVersion[0] + "', version '" + nameVersion[1] + "', protocol '" + nameVersion[2] + "'"); return nameVersion; diff --git a/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/Oracle122DatabasePlatform.java b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/Oracle122DatabasePlatform.java new file mode 100644 index 0000000000..1fce57563b --- /dev/null +++ b/symmetric-jdbc/src/main/java/org/jumpmind/db/platform/oracle/Oracle122DatabasePlatform.java @@ -0,0 +1,24 @@ +package org.jumpmind.db.platform.oracle; + +import javax.sql.DataSource; + +import org.jumpmind.db.platform.DatabaseNamesConstants; +import org.jumpmind.db.sql.SqlTemplateSettings; + +public class Oracle122DatabasePlatform extends OracleDatabasePlatform { + + public Oracle122DatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) { + super(dataSource, settings); + } + + @Override + protected OracleDdlBuilder createDdlBuilder() { + return new Oracle122DdlBuilder(); + } + + @Override + public String getName() { + return DatabaseNamesConstants.ORACLE122; + } + +}