diff options
author | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2019-07-05 11:51:50 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2019-07-10 08:36:54 +0200 |
commit | e55dfa2a1a23e8c0af37554dbdb3f6e96d6d1c81 (patch) | |
tree | d0e68e64bed9af80b60ef4e87ad6a763e0954f9e | |
parent | 4103f40cf559eb980069b6c9a0558f5c5a261277 (diff) | |
download | sonarqube-e55dfa2a1a23e8c0af37554dbdb3f6e96d6d1c81.tar.gz sonarqube-e55dfa2a1a23e8c0af37554dbdb3f6e96d6d1c81.zip |
SONAR-12251 use setNull(Types.DOUBLE) instead of setNull(Types.DECIMAL)
on SQL Server only
6 files changed, 24 insertions, 12 deletions
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/BaseSqlStatement.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/BaseSqlStatement.java index 1253f4aa727..e3a3dbcd2e7 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/BaseSqlStatement.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/BaseSqlStatement.java @@ -26,11 +26,15 @@ import java.sql.Types; import java.util.Date; import javax.annotation.Nullable; import org.apache.commons.dbutils.DbUtils; +import org.sonar.db.dialect.Dialect; +import org.sonar.db.dialect.MsSql; class BaseSqlStatement<CHILD extends SqlStatement> implements SqlStatement<CHILD> { + private final Dialect dialect; protected PreparedStatement pstmt; - protected BaseSqlStatement(PreparedStatement pstmt) { + protected BaseSqlStatement(Dialect dialect, PreparedStatement pstmt) { + this.dialect = dialect; this.pstmt = pstmt; } @@ -95,7 +99,7 @@ class BaseSqlStatement<CHILD extends SqlStatement> implements SqlStatement<CHILD @SuppressWarnings("unchecked") public CHILD setDouble(int columnIndex, @Nullable Double value) throws SQLException { if (value == null) { - pstmt.setNull(columnIndex, Types.DECIMAL); + pstmt.setNull(columnIndex, MsSql.ID.equals(dialect.getId()) ? Types.DOUBLE : Types.DECIMAL); } else { pstmt.setDouble(columnIndex, value); } diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/DataChange.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/DataChange.java index a6beab641fc..292b06ae535 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/DataChange.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/DataChange.java @@ -83,7 +83,7 @@ public abstract class DataChange implements MigrationStep { } public Upsert prepareUpsert(String sql) throws SQLException { - return UpsertImpl.create(writeConnection, sql); + return UpsertImpl.create(db, writeConnection, sql); } public MassUpdate prepareMassUpdate() { diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/MassUpdate.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/MassUpdate.java index b9f9bc402f1..388ba621f24 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/MassUpdate.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/MassUpdate.java @@ -73,7 +73,7 @@ public class MassUpdate { } public Upsert update(String sql) throws SQLException { - UpsertImpl upsert = UpsertImpl.create(writeConnection, sql); + UpsertImpl upsert = UpsertImpl.create(db, writeConnection, sql); this.updates.add(upsert); return upsert; } diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/SelectImpl.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/SelectImpl.java index 4d0ef0f7916..a079c08d4f9 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/SelectImpl.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/SelectImpl.java @@ -27,11 +27,12 @@ import java.util.ArrayList; import java.util.List; import org.apache.commons.dbutils.DbUtils; import org.sonar.db.Database; +import org.sonar.db.dialect.Dialect; public class SelectImpl extends BaseSqlStatement<Select> implements Select { - private SelectImpl(PreparedStatement pstmt) { - super(pstmt); + private SelectImpl(Dialect dialect, PreparedStatement pstmt) { + super(dialect, pstmt); } @Override @@ -93,6 +94,6 @@ public class SelectImpl extends BaseSqlStatement<Select> implements Select { // TODO use DbClient#newScrollingSelectStatement() PreparedStatement pstmt = connection.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); pstmt.setFetchSize(db.getDialect().getScrollDefaultFetchSize()); - return new SelectImpl(pstmt); + return new SelectImpl(db.getDialect(), pstmt); } } diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/UpsertImpl.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/UpsertImpl.java index 97007636427..f1c4bd5525e 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/UpsertImpl.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/step/UpsertImpl.java @@ -22,6 +22,8 @@ package org.sonar.server.platform.db.migration.step; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; +import org.sonar.db.Database; +import org.sonar.db.dialect.Dialect; import static com.google.common.base.Preconditions.checkArgument; @@ -32,8 +34,8 @@ public class UpsertImpl extends BaseSqlStatement<Upsert> implements Upsert { private int maxBatchSize = MAX_BATCH_SIZE; private long batchCount = 0L; - private UpsertImpl(PreparedStatement pstmt) { - super(pstmt); + private UpsertImpl(Dialect dialect, PreparedStatement pstmt) { + super(dialect, pstmt); } @Override @@ -80,7 +82,7 @@ public class UpsertImpl extends BaseSqlStatement<Upsert> implements Upsert { return this; } - public static UpsertImpl create(Connection connection, String sql) throws SQLException { - return new UpsertImpl(connection.prepareStatement(sql)); + public static UpsertImpl create(Database db, Connection connection, String sql) throws SQLException { + return new UpsertImpl(db.getDialect(), connection.prepareStatement(sql)); } } diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/UpsertImplTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/UpsertImplTest.java index 4e64063e643..e4eb9e35641 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/UpsertImplTest.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/UpsertImplTest.java @@ -23,9 +23,12 @@ import java.sql.Connection; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.sonar.db.Database; +import org.sonar.db.dialect.Dialect; import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class UpsertImplTest { @@ -68,6 +71,8 @@ public class UpsertImplTest { } private UpsertImpl create() throws Exception { - return UpsertImpl.create(mock(Connection.class), "sql"); + Database database = mock(Database.class); + when(database.getDialect()).thenReturn(mock(Dialect.class)); + return UpsertImpl.create(database, mock(Connection.class), "sql"); } } |