From: Julien Lancelot Date: Fri, 31 Oct 2014 07:38:55 +0000 (+0100) Subject: SONAR-5810 Fix migration when project key does not exists X-Git-Tag: 5.0-RC1~466 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=b641ada84fdbdd74a6af22e2af1ec9b5e9169d47;p=sonarqube.git SONAR-5810 Fix migration when project key does not exists --- diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuid.java b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuid.java index 6d79f726de1..c7e889bac72 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuid.java +++ b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuid.java @@ -27,6 +27,8 @@ import org.sonar.server.db.migrations.MassUpdate; import org.sonar.server.db.migrations.Select; import org.sonar.server.db.migrations.SqlStatement; +import javax.annotation.Nullable; + import java.sql.SQLException; import java.util.Date; @@ -51,14 +53,14 @@ public class ReplaceIssueFiltersProjectKeyByUuid extends BaseDataChange { final Date now = new Date(system.now()); MassUpdate massUpdate = context.prepareMassUpdate(); - massUpdate.select("SELECT f.id, f.data FROM issue_filters f"); + massUpdate.select("SELECT f.id, f.data FROM issue_filters f WHERE f.data like '%componentRoots=%'"); massUpdate.update("UPDATE issue_filters SET data=?, updated_at=? WHERE id=?"); massUpdate.execute(new MassUpdate.Handler() { @Override public boolean handle(Select.Row row, SqlStatement update) throws SQLException { Long id = row.getLong(1); String data = row.getString(2); - if (!data.contains(OLD_COMPONENT_ROOTS_FIELDS)) { + if (data == null) { return false; } update.setString(1, convertData(context, data)); @@ -76,11 +78,7 @@ public class ReplaceIssueFiltersProjectKeyByUuid extends BaseDataChange { String field = fields[i]; if (field.contains(OLD_COMPONENT_ROOTS_FIELDS)) { String[] componentRootValues = field.split("="); - if (componentRootValues.length == 2) { - newFields.append(convertField(context, componentRootValues[1])); - } else { - newFields.append(NEW_COMPONENT_ROOTS_FIELDS + "="); - } + append(context, newFields, componentRootValues.length == 2 ? componentRootValues[1] : null); } else { newFields.append(field); } @@ -91,9 +89,13 @@ public class ReplaceIssueFiltersProjectKeyByUuid extends BaseDataChange { return newFields.toString(); } - private String convertField(Context context, String projectKey) throws SQLException { - String projectUuid = context.prepareSelect("SELECT p.uuid FROM projects p WHERE p.kee=?").setString(1, projectKey).get(Select.STRING_READER); - return NEW_COMPONENT_ROOTS_FIELDS + "=" + projectUuid; + private void append(Context context, StringBuilder newFields, @Nullable String projectKey) throws SQLException { + if (projectKey != null) { + String projectUuid = context.prepareSelect("SELECT p.uuid FROM projects p WHERE p.kee=?").setString(1, projectKey).get(Select.STRING_READER); + if (projectUuid != null) { + newFields.append(NEW_COMPONENT_ROOTS_FIELDS + "=" + projectUuid); + } + } } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest.java b/server/sonar-server/src/test/java/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest.java index 00d1a17cf85..c75ff109b04 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest.java @@ -47,11 +47,20 @@ public class ReplaceIssueFiltersProjectKeyByUuidTest { @Test public void execute() throws Exception { - db.prepareDbUnit(getClass(), "before.xml"); + db.prepareDbUnit(getClass(), "execute.xml"); migration.execute(); - db.assertDbUnit(getClass(), "after.xml", "issue_filters"); + db.assertDbUnit(getClass(), "execute-result.xml", "issue_filters"); } -} \ No newline at end of file + @Test + public void not_migrate_already_migrated_data() throws Exception { + db.prepareDbUnit(getClass(), "not_migrate_already_migrated_data.xml"); + + migration.execute(); + + db.assertDbUnit(getClass(), "not_migrate_already_migrated_data-result.xml", "issue_filters"); + } + +} diff --git a/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/after.xml b/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/after.xml deleted file mode 100644 index ec83825f445..00000000000 --- a/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/after.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - diff --git a/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/before.xml b/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/before.xml deleted file mode 100644 index 840bba32908..00000000000 --- a/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/before.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - diff --git a/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/execute-result.xml b/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/execute-result.xml new file mode 100644 index 00000000000..bd1e8a11577 --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/execute-result.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + diff --git a/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/execute.xml b/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/execute.xml new file mode 100644 index 00000000000..770f048586d --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/execute.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + diff --git a/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/not_migrate_already_migrated_data-result.xml b/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/not_migrate_already_migrated_data-result.xml new file mode 100644 index 00000000000..c0e063eb9f8 --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/not_migrate_already_migrated_data-result.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + diff --git a/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/not_migrate_already_migrated_data.xml b/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/not_migrate_already_migrated_data.xml new file mode 100644 index 00000000000..313bbb19f65 --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuidTest/not_migrate_already_migrated_data.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + +