Skip to content

Commit

Permalink
Fixed #2093: Oracle 18c support
Browse files Browse the repository at this point in the history
  • Loading branch information
Axel Fontaine committed Sep 19, 2018
1 parent 9df19c9 commit 2d5a9f6
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 17 deletions.
Expand Up @@ -123,7 +123,7 @@ public final void ensureSupported() {
throw new org.flywaydb.core.internal.exception.FlywayEnterpriseUpgradeRequiredException("Oracle", "Oracle", version);
}

if (majorVersion > 12) {
if (majorVersion > 18 || (majorVersion == 18 && minorVersion > 0)) {
recommendFlywayUpgrade("Oracle", version);
}
}
Expand Down
Expand Up @@ -197,8 +197,11 @@ private void disableFlashbackArchiveForFbaTrackedTables() throws SQLException {
return;
}

String queryForFbaTrackedTables = "SELECT TABLE_NAME FROM " + (dbaViewAccessible ? "DBA_" : "USER_") +
"FLASHBACK_ARCHIVE_TABLES WHERE OWNER_NAME = ?";
boolean oracle18orNewer = database.getMajorVersion() >= 18;

String queryForFbaTrackedTables = "SELECT TABLE_NAME FROM " + (dbaViewAccessible ? "DBA_" : "USER_")
+ "FLASHBACK_ARCHIVE_TABLES WHERE OWNER_NAME = ?"
+ (oracle18orNewer ? " AND STATUS='ENABLED'" : "");
List<String> tableNames = jdbcTemplate.queryForStringList(queryForFbaTrackedTables, name);
for (String tableName : tableNames) {
jdbcTemplate.execute("ALTER TABLE " + database.quote(name, tableName) + " NO FLASHBACK ARCHIVE");
Expand All @@ -212,6 +215,18 @@ private void disableFlashbackArchiveForFbaTrackedTables() throws SQLException {
}
}
}

if (oracle18orNewer) {
while (database.queryReturnsRows("SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = ?\n"
+ " AND TABLE_NAME LIKE 'SYS_FBA_DDL_COLMAP_%'", name)) {
try {
LOG.debug("Actively waiting for Flashback colmap cleanup");
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new FlywayException("Waiting for Flashback colmap cleanup interrupted", e);
}
}
}
}

/**
Expand Down Expand Up @@ -366,7 +381,9 @@ public String generateDropStatement(JdbcTemplate jdbcTemplate, OracleDatabase da
@Override
public List<String> getObjectNames(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) throws SQLException {
return jdbcTemplate.queryForStringList(
"SELECT INDEX_NAME FROM ALL_INDEXES WHERE OWNER = ? AND INDEX_TYPE NOT LIKE '%DOMAIN%'",
"SELECT INDEX_NAME FROM ALL_INDEXES WHERE OWNER = ?" +
//" AND INDEX_NAME NOT LIKE 'SYS_C%'"+
" AND INDEX_TYPE NOT LIKE '%DOMAIN%'",
schema.getName()
);
}
Expand Down Expand Up @@ -506,7 +523,7 @@ public List<String> getObjectNames(JdbcTemplate jdbcTemplate, OracleDatabase dat
}

@Override
public String generateDropStatement(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema, String objectName) throws SQLException {
public String generateDropStatement(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema, String objectName) {
return "BEGIN DBMS_DATA_MINING.DROP_MODEL('" +


Expand Down Expand Up @@ -584,7 +601,7 @@ public String generateDropStatement(JdbcTemplate jdbcTemplate, OracleDatabase da
// Intentionally skip them and let the clean callbacks handle them if needed.
DATABASE_LINK("DATABASE LINK") {
@Override
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) throws SQLException {
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) {
super.warnUnsupported(database.quote(schema.getName()));
}

Expand All @@ -603,7 +620,7 @@ public String generateDropStatement(JdbcTemplate jdbcTemplate, OracleDatabase da
},
CREDENTIAL("CREDENTIAL") {
@Override
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) throws SQLException {
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) {
super.warnUnsupported(database.quote(schema.getName()));
}

Expand All @@ -616,7 +633,7 @@ public String generateDropStatement(JdbcTemplate jdbcTemplate, OracleDatabase da
// Some scheduler types, not supported yet.
DATABASE_DESTINATION("DESTINATION") {
@Override
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) throws SQLException {
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) {
super.warnUnsupported(database.quote(schema.getName()));
}

Expand All @@ -627,7 +644,7 @@ public String generateDropStatement(JdbcTemplate jdbcTemplate, OracleDatabase da
},
SCHEDULER_GROUP("SCHEDULER GROUP") {
@Override
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) throws SQLException {
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) {
super.warnUnsupported(database.quote(schema.getName()));
}

Expand All @@ -640,39 +657,39 @@ public String generateDropStatement(JdbcTemplate jdbcTemplate, OracleDatabase da
// OLAP objects, not supported yet.
CUBE("CUBE") {
@Override
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) throws SQLException {
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) {
super.warnUnsupported(database.quote(schema.getName()));
}
},
CUBE_DIMENSION("CUBE DIMENSION") {
@Override
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) throws SQLException {
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) {
super.warnUnsupported(database.quote(schema.getName()));
}
},
CUBE_BUILD_PROCESS("CUBE BUILD PROCESS") {
@Override
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) throws SQLException {
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) {
super.warnUnsupported(database.quote(schema.getName()), "cube build processes");
}
},
MEASURE_FOLDER("MEASURE FOLDER") {
@Override
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) throws SQLException {
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) {
super.warnUnsupported(database.quote(schema.getName()));
}
},

// Undocumented objects.
ASSEMBLY("ASSEMBLY") {
@Override
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) throws SQLException {
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) {
super.warnUnsupported(database.quote(schema.getName()), "assemblies");
}
},
JAVA_DATA("JAVA DATA") {
@Override
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) throws SQLException {
public void dropObjects(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema) {
super.warnUnsupported(database.quote(schema.getName()));
}
},
Expand Down Expand Up @@ -732,9 +749,8 @@ public List<String> getObjectNames(JdbcTemplate jdbcTemplate, OracleDatabase dat
/**
* Generates the drop statement for the specified object.
*
* @throws SQLException if generating of the statement failed.
*/
public String generateDropStatement(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema, String objectName) throws SQLException {
public String generateDropStatement(JdbcTemplate jdbcTemplate, OracleDatabase database, OracleSchema schema, String objectName) {
return "DROP " + this.getName() + " " + database.quote(schema.getName(), objectName) +
(StringUtils.hasText(dropOptions) ? " " + dropOptions : "");
}
Expand Down

0 comments on commit 2d5a9f6

Please sign in to comment.