aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@sonarsource.com>2016-09-16 16:15:02 +0200
committerSimon Brandhof <simon.brandhof@sonarsource.com>2016-09-16 16:15:02 +0200
commit291509ecd95f3fcfb218d755f6eefbaec1bf4cb8 (patch)
tree08d5eaef73f19074f00172a57130cc846b3dcac1
parent88591239560c1b90f40c56ec322462a7eaaea173 (diff)
downloadsonarqube-291509ecd95f3fcfb218d755f6eefbaec1bf4cb8.tar.gz
sonarqube-291509ecd95f3fcfb218d755f6eefbaec1bf4cb8.zip
SONAR-7988 support migrations on old table activities
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/db/CheckDatabaseCharsetAtStartup.java1
-rw-r--r--sonar-db/src/main/java/org/sonar/db/charset/ColumnDef.java3
-rw-r--r--sonar-db/src/main/java/org/sonar/db/version/DatabaseVersion.java12
-rw-r--r--sonar-db/src/test/java/org/sonar/db/charset/ColumnDefTest.java14
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();
}
}