aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-db/src/main/java/org/sonar
diff options
context:
space:
mode:
Diffstat (limited to 'sonar-db/src/main/java/org/sonar')
-rw-r--r--sonar-db/src/main/java/org/sonar/db/charset/ColumnDef.java17
-rw-r--r--sonar-db/src/main/java/org/sonar/db/charset/MssqlCharsetHandler.java3
-rw-r--r--sonar-db/src/main/java/org/sonar/db/charset/MysqlCharsetHandler.java3
-rw-r--r--sonar-db/src/main/java/org/sonar/db/version/DatabaseVersion.java5
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",