diff options
author | Simon Brandhof <simon.brandhof@sonarsource.com> | 2016-09-16 16:15:02 +0200 |
---|---|---|
committer | Simon Brandhof <simon.brandhof@sonarsource.com> | 2016-09-16 16:15:02 +0200 |
commit | 291509ecd95f3fcfb218d755f6eefbaec1bf4cb8 (patch) | |
tree | 08d5eaef73f19074f00172a57130cc846b3dcac1 | |
parent | 88591239560c1b90f40c56ec322462a7eaaea173 (diff) | |
download | sonarqube-291509ecd95f3fcfb218d755f6eefbaec1bf4cb8.tar.gz sonarqube-291509ecd95f3fcfb218d755f6eefbaec1bf4cb8.zip |
SONAR-7988 support migrations on old table activities
4 files changed, 25 insertions, 5 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/db/CheckDatabaseCharsetAtStartup.java b/server/sonar-server/src/main/java/org/sonar/server/platform/db/CheckDatabaseCharsetAtStartup.java index 9d61afdd0bc..28260499183 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/db/CheckDatabaseCharsetAtStartup.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/db/CheckDatabaseCharsetAtStartup.java @@ -39,6 +39,7 @@ public class CheckDatabaseCharsetAtStartup implements Startable { @Override public void start() { + System.out.println("xxxxxxxxxxx"); DatabaseCharsetChecker.State state = DatabaseCharsetChecker.State.STARTUP; if (upgradeStatus.isUpgraded()) { state = DatabaseCharsetChecker.State.UPGRADE; diff --git a/sonar-db/src/main/java/org/sonar/db/charset/ColumnDef.java b/sonar-db/src/main/java/org/sonar/db/charset/ColumnDef.java index 02213499e7f..c2c20f176bf 100644 --- a/sonar-db/src/main/java/org/sonar/db/charset/ColumnDef.java +++ b/sonar-db/src/main/java/org/sonar/db/charset/ColumnDef.java @@ -80,7 +80,8 @@ public class ColumnDef { } public boolean isInSonarQubeTable() { - return DatabaseVersion.TABLES.contains(table.toLowerCase(Locale.ENGLISH)); + String tableName = table.toLowerCase(Locale.ENGLISH); + return DatabaseVersion.TABLES.contains(tableName) || DatabaseVersion.OLD_DROPPED_TABLES.contains(tableName); } public enum ColumnDefRowConverter implements SqlExecutor.RowConverter<ColumnDef> { diff --git a/sonar-db/src/main/java/org/sonar/db/version/DatabaseVersion.java b/sonar-db/src/main/java/org/sonar/db/version/DatabaseVersion.java index fa67f02ad38..9e7d9076e02 100644 --- a/sonar-db/src/main/java/org/sonar/db/version/DatabaseVersion.java +++ b/sonar-db/src/main/java/org/sonar/db/version/DatabaseVersion.java @@ -40,6 +40,17 @@ public class DatabaseVersion { public static final int MIN_UPGRADE_VERSION = 1152; /** + * These tables are still involved in DB migrations, so potentially + * incorrect collation must be fixed so that joins with other + * tables are possible. + * + * @see org.sonar.db.charset.ColumnDef#isInSonarQubeTable() + */ + public static final Set<String> OLD_DROPPED_TABLES = ImmutableSet.of( + "activities" + ); + + /** * List of all the tables. * This list is hardcoded because we didn't succeed in using java.sql.DatabaseMetaData#getTables() in the same way * for all the supported databases, particularly due to Oracle results. @@ -95,6 +106,7 @@ public class DatabaseVersion { "user_tokens", "widgets", "widget_properties"); + private MyBatis mybatis; public DatabaseVersion(MyBatis mybatis) { diff --git a/sonar-db/src/test/java/org/sonar/db/charset/ColumnDefTest.java b/sonar-db/src/test/java/org/sonar/db/charset/ColumnDefTest.java index 8a718e18b62..55b02e0ea1e 100644 --- a/sonar-db/src/test/java/org/sonar/db/charset/ColumnDefTest.java +++ b/sonar-db/src/test/java/org/sonar/db/charset/ColumnDefTest.java @@ -27,19 +27,25 @@ public class ColumnDefTest { @Test public void isInSonarQubeTable_returns_false_if_sqlazure_system_table() { - ColumnDef underTest = new ColumnDef("sys.sysusers", "colum", "charset", "collation", "NVARCHAR", 100L, false); + ColumnDef underTest = new ColumnDef("sys.sysusers", "login", "charset", "collation", "NVARCHAR", 100L, false); assertThat(underTest.isInSonarQubeTable()).isFalse(); - underTest = new ColumnDef("SYS.SYSUSERS", "colum", "charset", "collation", "NVARCHAR", 100L, false); + underTest = new ColumnDef("SYS.SYSUSERS", "login", "charset", "collation", "NVARCHAR", 100L, false); assertThat(underTest.isInSonarQubeTable()).isFalse(); } @Test public void isInSonarQubeTable_returns_true_if_table_created_by_sonarqube() { - ColumnDef underTest = new ColumnDef("project_measures", "column", "charset", "collation", "NVARCHAR", 100L, false); + ColumnDef underTest = new ColumnDef("project_measures", "text_value", "charset", "collation", "NVARCHAR", 100L, false); assertThat(underTest.isInSonarQubeTable()).isTrue(); - underTest = new ColumnDef("PROJECT_MEASURES", "column", "charset", "collation", "NVARCHAR", 100L, false); + underTest = new ColumnDef("PROJECT_MEASURES", "text_value", "charset", "collation", "NVARCHAR", 100L, false); + assertThat(underTest.isInSonarQubeTable()).isTrue(); + } + + @Test + public void isInSonarQubeTable_returns_true_if_table_existed_in_previous_versions_of_sonarqube() { + ColumnDef underTest = new ColumnDef("activities", "kee", "charset", "collation", "NVARCHAR", 100L, false); assertThat(underTest.isInSonarQubeTable()).isTrue(); } } |