diff options
author | Jenkins CI <ci@sonarsource.com> | 2016-05-06 08:01:15 +0200 |
---|---|---|
committer | Jenkins CI <ci@sonarsource.com> | 2016-05-06 08:01:15 +0200 |
commit | 303324b8c95a9c73870d850e68da5d01a648c0bc (patch) | |
tree | 5efde68373ee936450cddb0124522aff559f7247 /sonar-db/src/main/java/org/sonar | |
parent | a9c89fb3101e728a4e92180fcdfbe1e3a4a28a0c (diff) | |
parent | 5e424b6e964cf798e7ecb674b2fff82d5fbebef4 (diff) | |
download | sonarqube-303324b8c95a9c73870d850e68da5d01a648c0bc.tar.gz sonarqube-303324b8c95a9c73870d850e68da5d01a648c0bc.zip |
Automatic merge from branch-5.5
* origin/branch-5.5:
SONAR-7589 Error when upgrading to SonarQube 5.5 on SQL Azure
Diffstat (limited to 'sonar-db/src/main/java/org/sonar')
4 files changed, 24 insertions, 4 deletions
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 45d4b017546..461bf32365b 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 @@ -19,9 +19,13 @@ */ package org.sonar.db.charset; +import com.google.common.base.Predicate; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Locale; +import javax.annotation.Nonnull; import javax.annotation.concurrent.Immutable; +import org.sonar.db.version.DatabaseVersion; /** * Result of standard SQL command "select * from INFORMATION_SCHEMA" (columns listed in {@link #SELECT_COLUMNS}). @@ -77,6 +81,10 @@ public class ColumnDef { return nullable; } + public boolean isInSonarQubeTable() { + return DatabaseVersion.TABLES.contains(table.toLowerCase(Locale.ENGLISH)); + } + public enum ColumnDefRowConverter implements SqlExecutor.RowConverter<ColumnDef> { INSTANCE; @@ -89,4 +97,13 @@ public class ColumnDef { rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getLong(6), nullable); } } + + public enum IsInSonarQubeTablePredicate implements Predicate<ColumnDef> { + INSTANCE; + + @Override + public boolean apply(@Nonnull ColumnDef input) { + return input.isInSonarQubeTable(); + } + } } diff --git a/sonar-db/src/main/java/org/sonar/db/charset/MssqlCharsetHandler.java b/sonar-db/src/main/java/org/sonar/db/charset/MssqlCharsetHandler.java index 347fc372133..774251771eb 100644 --- a/sonar-db/src/main/java/org/sonar/db/charset/MssqlCharsetHandler.java +++ b/sonar-db/src/main/java/org/sonar/db/charset/MssqlCharsetHandler.java @@ -27,6 +27,7 @@ import java.util.List; import org.sonar.api.utils.log.Logger; import org.sonar.api.utils.log.Loggers; +import static com.google.common.collect.FluentIterable.from; import static java.lang.String.format; import static org.apache.commons.lang.StringUtils.endsWithIgnoreCase; @@ -53,7 +54,7 @@ class MssqlCharsetHandler extends CharsetHandler { "FROM [INFORMATION_SCHEMA].[COLUMNS] " + "WHERE collation_name is not null " + "ORDER BY table_name,column_name", ColumnDef.ColumnDefRowConverter.INSTANCE); - for (ColumnDef column : columns) { + for (ColumnDef column : from(columns).filter(ColumnDef.IsInSonarQubeTablePredicate.INSTANCE)) { if (!endsWithIgnoreCase(column.getCollation(), "_CS_AS")) { repairColumnCollation(connection, column); } diff --git a/sonar-db/src/main/java/org/sonar/db/charset/MysqlCharsetHandler.java b/sonar-db/src/main/java/org/sonar/db/charset/MysqlCharsetHandler.java index 43ffd828cbe..43bec2d9ffc 100644 --- a/sonar-db/src/main/java/org/sonar/db/charset/MysqlCharsetHandler.java +++ b/sonar-db/src/main/java/org/sonar/db/charset/MysqlCharsetHandler.java @@ -30,6 +30,7 @@ import org.sonar.api.utils.MessageException; import org.sonar.api.utils.log.Logger; import org.sonar.api.utils.log.Loggers; +import static com.google.common.collect.FluentIterable.from; import static java.lang.String.format; import static org.apache.commons.lang.StringUtils.containsIgnoreCase; import static org.apache.commons.lang.StringUtils.endsWithIgnoreCase; @@ -66,7 +67,7 @@ class MysqlCharsetHandler extends CharsetHandler { "FROM INFORMATION_SCHEMA.columns " + "WHERE table_schema=database() and character_set_name is not null and collation_name is not null", ColumnDef.ColumnDefRowConverter.INSTANCE); List<String> utf8Errors = new ArrayList<>(); - for (ColumnDef column : columns) { + for (ColumnDef column : from(columns).filter(ColumnDef.IsInSonarQubeTablePredicate.INSTANCE)) { if (enforceUtf8 && !containsIgnoreCase(column.getCharset(), UTF8)) { utf8Errors.add(format("%s.%s", column.getTable(), column.getColumn())); } else if (endsWithIgnoreCase(column.getCollation(), "_ci")) { 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 8f51cc19382..9ccbc32b410 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 @@ -20,9 +20,10 @@ package org.sonar.db.version; import com.google.common.annotations.VisibleForTesting; -import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import java.util.Collections; import java.util.List; +import java.util.Set; import javax.annotation.Nullable; import org.apache.ibatis.session.SqlSession; import org.sonar.db.MyBatis; @@ -43,7 +44,7 @@ public class DatabaseVersion { * 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. */ - public static final List<String> TABLES = ImmutableList.of( + public static final Set<String> TABLES = ImmutableSet.of( "active_dashboards", "active_rules", "active_rule_parameters", |