From 4482622602b2ccb881411fa92b8d0f80705a02b2 Mon Sep 17 00:00:00 2001 From: jmarchionatto <60409882+jmarchionatto@users.noreply.github.com> Date: Thu, 18 May 2023 16:10:31 -0400 Subject: [PATCH] 4910-dm-migration-error-for-oracle-19c (#4916) * Remove all_constraints references which break in oracle 19c * Add changelog --------- Co-authored-by: juan.marchionatto --- .../4910-dm-migration-error-for-oracle-19c.yaml | 4 ++++ .../uhn/fhir/jpa/migrate/taskdef/DropIndexTask.java | 4 +--- .../fhir/jpa/migrate/taskdef/ModifyColumnTask.java | 13 ++++++------- 3 files changed, 11 insertions(+), 10 deletions(-) create mode 100644 hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_6_0/4910-dm-migration-error-for-oracle-19c.yaml diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_6_0/4910-dm-migration-error-for-oracle-19c.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_6_0/4910-dm-migration-error-for-oracle-19c.yaml new file mode 100644 index 00000000000..416486acc5e --- /dev/null +++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_6_0/4910-dm-migration-error-for-oracle-19c.yaml @@ -0,0 +1,4 @@ +--- +type: fix +issue: 4910 +title: "Remove some references to `all_constraints` table in oracle database migration tasks which were causing errors for version 19c." diff --git a/hapi-fhir-sql-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/taskdef/DropIndexTask.java b/hapi-fhir-sql-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/taskdef/DropIndexTask.java index 7b566a871b4..12fc29f8398 100644 --- a/hapi-fhir-sql-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/taskdef/DropIndexTask.java +++ b/hapi-fhir-sql-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/taskdef/DropIndexTask.java @@ -160,11 +160,9 @@ public class DropIndexTask extends BaseTableTask { @Language("SQL") String dropConstraintSql = "ALTER TABLE " + getTableName() + " DROP CONSTRAINT ?"; findAndDropConstraint(findConstraintSql, dropConstraintSql); } else if (getDriverType() == DriverTypeEnum.ORACLE_12C) { - @Language("SQL") String findConstraintSql = "SELECT DISTINCT constraint_name FROM user_cons_columns WHERE constraint_name = ? AND table_name = ?"; + @Language("SQL") String findConstraintSql = "SELECT constraint_name FROM user_constraints WHERE constraint_name = ? AND table_name = ?"; @Language("SQL") String dropConstraintSql = "ALTER TABLE " + getTableName() + " DROP CONSTRAINT ?"; findAndDropConstraint(findConstraintSql, dropConstraintSql); - findConstraintSql = "SELECT DISTINCT constraint_name FROM all_constraints WHERE index_name = ? AND table_name = ?"; - findAndDropConstraint(findConstraintSql, dropConstraintSql); } else if (getDriverType() == DriverTypeEnum.MSSQL_2012) { // Legacy deletion for SQL Server unique indexes @Language("SQL") String findConstraintSql = "SELECT tc.CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc WHERE tc.CONSTRAINT_NAME = ? AND tc.TABLE_NAME = ?"; diff --git a/hapi-fhir-sql-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/taskdef/ModifyColumnTask.java b/hapi-fhir-sql-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/taskdef/ModifyColumnTask.java index 13f268932c8..149b1b32a28 100644 --- a/hapi-fhir-sql-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/taskdef/ModifyColumnTask.java +++ b/hapi-fhir-sql-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/taskdef/ModifyColumnTask.java @@ -164,10 +164,10 @@ public class ModifyColumnTask extends BaseTableColumnTypeTask { case ORACLE_12C: @Language("SQL") String findNullableConstraintSql = "SELECT acc.owner, acc.table_name, acc.column_name, search_condition_vc " + - "FROM all_cons_columns acc, all_constraints ac " + - "WHERE acc.constraint_name = ac.constraint_name " + - "AND acc.table_name = ac.table_name " + - "AND ac.constraint_type = ? " + + "FROM all_cons_columns acc, user_constraints uc " + + "WHERE acc.constraint_name = uc.constraint_name " + + "AND acc.table_name = uc.table_name " + + "AND uc.constraint_type = ? " + "AND acc.table_name = ? " + "AND acc.column_name = ? " + "AND search_condition_vc = ? "; @@ -176,9 +176,8 @@ public class ModifyColumnTask extends BaseTableColumnTypeTask { params[1] = tableName.toUpperCase(); params[2] = columnName.toUpperCase(); params[3] = "\"" + columnName.toUpperCase() + "\" IS NOT NULL"; - List> queryResults = getConnectionProperties().getTxTemplate().execute(t -> { - return getConnectionProperties().newJdbcTemplate().query(findNullableConstraintSql, params, new ColumnMapRowMapper()); - }); + List> queryResults = getConnectionProperties().getTxTemplate().execute(t -> + getConnectionProperties().newJdbcTemplate().query(findNullableConstraintSql, params, new ColumnMapRowMapper())); // If this query returns a row then the existence of that row indicates that a NOT NULL constraint exists // on this Column and we must override whatever result was previously calculated and set it to false if (queryResults != null && queryResults.size() > 0 && queryResults.get(0) != null && !queryResults.get(0).isEmpty()) {