aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-db/src/main
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2016-06-24 18:11:42 +0200
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>2016-06-27 15:52:46 +0200
commit31afeda58d4b373438fc49b95ff15fb17f469a08 (patch)
treec691861863a5a7590eedfbac36ecc879b1ed3cb8 /sonar-db/src/main
parenta8780a63b0adf0b607725c2a780a1b31722a1fd1 (diff)
downloadsonarqube-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.java18
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);