diff options
author | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2016-06-24 18:11:42 +0200 |
---|---|---|
committer | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2016-06-27 15:52:46 +0200 |
commit | 31afeda58d4b373438fc49b95ff15fb17f469a08 (patch) | |
tree | c691861863a5a7590eedfbac36ecc879b1ed3cb8 /sonar-db/src/main | |
parent | a8780a63b0adf0b607725c2a780a1b31722a1fd1 (diff) | |
download | sonarqube-31afeda58d4b373438fc49b95ff15fb17f469a08.tar.gz sonarqube-31afeda58d4b373438fc49b95ff15fb17f469a08.zip |
SONAR-7798 support BIN and BIN2 collation on MsSQL
Diffstat (limited to 'sonar-db/src/main')
-rw-r--r-- | sonar-db/src/main/java/org/sonar/db/charset/MssqlCharsetHandler.java | 18 |
1 files changed, 15 insertions, 3 deletions
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 6eb18364796..6b3cef60d1f 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 @@ -43,6 +43,8 @@ class MssqlCharsetHandler extends CharsetHandler { private static final String CASE_INSENSITIVE_ACCENT_INSENSITIVE = "_CI_AI"; private static final String CASE_INSENSITIVE_ACCENT_SENSITIVE = "_CI_AS"; private static final String CASE_SENSITIVE_ACCENT_INSENSITIVE = "_CS_AI"; + private static final String BIN = "BIN"; + private static final String BIN2 = "BIN2"; protected MssqlCharsetHandler(SqlExecutor selectExecutor) { super(selectExecutor); @@ -63,7 +65,7 @@ class MssqlCharsetHandler extends CharsetHandler { "ORDER BY table_name,column_name", ColumnDef.ColumnDefRowConverter.INSTANCE); for (ColumnDef column : from(columns).filter(ColumnDef.IsInSonarQubeTablePredicate.INSTANCE)) { - if (!containsIgnoreCase(column.getCollation(), CASE_SENSITIVE_ACCENT_SENSITIVE)) { + if (!isCollationCorrect(column)) { if (flags.contains(AUTO_REPAIR_COLLATION)) { repairColumnCollation(connection, column); } else { @@ -78,6 +80,16 @@ class MssqlCharsetHandler extends CharsetHandler { } } + /** + * Collation is correct if is contains {@link #CASE_SENSITIVE_ACCENT_SENSITIVE} or {@link #BIN} or {@link #BIN2}. + */ + private static boolean isCollationCorrect(ColumnDef column) { + String collation = column.getCollation(); + return containsIgnoreCase(collation, CASE_SENSITIVE_ACCENT_SENSITIVE) + || containsIgnoreCase(collation, BIN) + || containsIgnoreCase(collation, BIN2); + } + private static void logInit(Set<DatabaseCharsetChecker.Flag> flags) { if (flags.contains(AUTO_REPAIR_COLLATION)) { LOGGER.info("Repair case-insensitive or accent-insensitive database columns"); @@ -136,9 +148,9 @@ class MssqlCharsetHandler extends CharsetHandler { } @VisibleForTesting - static String toCaseSensitive(String ciCollation) { + static String toCaseSensitive(String collation) { // Example: Latin1_General_CI_AI --> Latin1_General_CS_AS or Latin1_General_100_CI_AS_KS_WS --> Latin1_General_100_CS_AS_KS_WS - return ciCollation + return collation .replace(CASE_INSENSITIVE_ACCENT_INSENSITIVE, CASE_SENSITIVE_ACCENT_SENSITIVE) .replace(CASE_INSENSITIVE_ACCENT_SENSITIVE, CASE_SENSITIVE_ACCENT_SENSITIVE) .replace(CASE_SENSITIVE_ACCENT_INSENSITIVE, CASE_SENSITIVE_ACCENT_SENSITIVE); |