diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/VersionEnum.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/VersionEnum.java index 8c379e651ce5..791401008c3b 100644 --- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/VersionEnum.java +++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/VersionEnum.java @@ -130,6 +130,8 @@ public enum VersionEnum { V6_10_0, V6_10_1, + V6_10_2, + V6_10_3, V6_11_0, V7_0_0; diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_10_1/version.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_10_1/version.yaml index a29e249409a0..516f091f11f9 100644 --- a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_10_1/version.yaml +++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_10_1/version.yaml @@ -1,3 +1,3 @@ --- -release-date: "2023-08-31" +release-date: "2023-12-18" codename: "Zed" diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_10_2/upgrade.md b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_10_2/upgrade.md new file mode 100644 index 000000000000..6d06ae7f2504 --- /dev/null +++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_10_2/upgrade.md @@ -0,0 +1,5 @@ +### Major Database Change + +This release fixes a migration from 6.10.1 that was ineffective for SQL Server (MSSQL) instances. +This may take several minutes on a larger system (e.g. 10 minutes for 100 million resources). +For zero-downtime, or for larger systems, we recommend you upgrade the schema using the CLI tools. diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_10_2/version.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_10_2/version.yaml new file mode 100644 index 000000000000..01b8caebed43 --- /dev/null +++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_10_2/version.yaml @@ -0,0 +1,3 @@ +--- +release-date: "2023-12-22" +codename: "Zed" diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/migrate/tasks/HapiFhirJpaMigrationTasks.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/migrate/tasks/HapiFhirJpaMigrationTasks.java index cd577a6d4c5c..9d50199fb88d 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/migrate/tasks/HapiFhirJpaMigrationTasks.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/migrate/tasks/HapiFhirJpaMigrationTasks.java @@ -198,7 +198,11 @@ protected void init700() { "Column HFJ_SPIDX_STRING.SP_VALUE_NORMALIZED already has a collation of 'C' so doing nothing"); } - version.addTask(new ForceIdMigrationFixTask(version.getRelease(), "20231213.1")); + // This fix was bad for MSSQL, it has been set to do nothing. + version.addTask(new ForceIdMigrationFixTask(version.getRelease(), "20231213.1").setDoNothing(true)); + + // This fix will work for MSSQL or Oracle. + version.addTask(new ForceIdMigrationFixTask(version.getRelease(), "20231222.1")); } protected void init680() { diff --git a/hapi-fhir-sql-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/taskdef/ForceIdMigrationFixTask.java b/hapi-fhir-sql-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/taskdef/ForceIdMigrationFixTask.java index c6eca73bb9b5..7f29d3ba38b5 100644 --- a/hapi-fhir-sql-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/taskdef/ForceIdMigrationFixTask.java +++ b/hapi-fhir-sql-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/taskdef/ForceIdMigrationFixTask.java @@ -100,7 +100,7 @@ protected void doExecute() throws SQLException { + // avoid useless updates on engines that don't check // skip case 1, 2. Only check 3,4,5 - " where (fhir_id is null or fhir_id <> trim(fhir_id)) " + getWhereClauseByDBType() + // chunk range. " and res_id >= ? and res_id < ?", @@ -109,6 +109,15 @@ protected void doExecute() throws SQLException { } } + private String getWhereClauseByDBType() { + switch (getDriverType()) { + case MSSQL_2012: + return " where (fhir_id is null or DATALENGTH(fhir_id) > LEN(fhir_id)) "; + default: + return " where (fhir_id is null or fhir_id <> trim(fhir_id)) "; + } + } + @Override protected void generateHashCode(HashCodeBuilder theBuilder) { // no-op - this is a singleton.