From ffe8bb6ab961e6b910fd890565a16243006c1acd Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Wed, 3 Jun 2020 14:34:45 +0200 Subject: [PATCH] Table creation migrations should not be re-entrant * Table creation should not be re-entrant The creation of a table should not be re-entrant. Indeed, if the creation of the table is in success but not the creation of the index(es), then next execution of the migration will ignore creation of indexes. * Simplify some mappers insert usage and some dao tests --- .../java/org/sonar/db/alm/pat/AlmPatDao.java | 6 ++--- .../org/sonar/db/alm/pat/AlmPatMapper.java | 4 +-- .../sonar/db/alm/setting/AlmSettingDao.java | 7 +++-- .../db/alm/setting/AlmSettingMapper.java | 4 +-- .../org/sonar/db/alm/pat/AlmPatMapper.xml | 8 +++--- .../sonar/db/alm/setting/AlmSettingMapper.xml | 8 +++--- ...{ALMPatDaoTest.java => AlmPatDaoTest.java} | 21 +++++---------- .../db/alm/setting/AlmSettingDaoTest.java | 16 +++-------- .../alm/setting/ProjectAlmSettingDaoTest.java | 15 +++-------- .../db/migration/sql/CreateTableBuilder.java | 10 ------- .../version/v80/CreateNewCodePeriodTable.java | 12 --------- .../v80/CreateProjectQualityGatesTable.java | 11 -------- .../version/v81/CreateAlmSettingsTable.java | 11 -------- .../v81/CreateProjectAlmSettingsTable.java | 11 -------- .../version/v82/CreateAlmPatsTable.java | 12 --------- .../version/v82/CreateProjectsTable.java | 11 -------- .../v80/CreateNewCodePeriodTableTest.java | 3 --- .../CreateProjectQualityGatesTableTest.java | 3 --- .../v81/CreateAlmSettingsTableTest.java | 3 --- .../CreateProjectAlmSettingsTableTest.java | 3 --- .../version/v82/CreateAlmPATsTableTest.java | 3 --- .../version/v82/CreateProjectsTableTest.java | 3 --- .../RenameProjectsTableToComponentsTest.java | 27 +++++++++---------- 23 files changed, 42 insertions(+), 170 deletions(-) rename server/sonar-db-dao/src/test/java/org/sonar/db/alm/pat/{ALMPatDaoTest.java => AlmPatDaoTest.java} (91%) diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/pat/AlmPatDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/pat/AlmPatDao.java index 7f0164253ae..899df1e53f8 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/pat/AlmPatDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/pat/AlmPatDao.java @@ -52,16 +52,16 @@ public class AlmPatDao implements Dao { public void insert(DbSession dbSession, AlmPatDto almPatDto) { String uuid = uuidFactory.create(); long now = system2.now(); - getMapper(dbSession).insert(almPatDto, uuid, now); almPatDto.setUuid(uuid); almPatDto.setCreatedAt(now); almPatDto.setUpdatedAt(now); + getMapper(dbSession).insert(almPatDto); } public void update(DbSession dbSession, AlmPatDto almPatDto) { long now = system2.now(); - getMapper(dbSession).update(almPatDto, now); almPatDto.setUpdatedAt(now); + getMapper(dbSession).update(almPatDto); } public void delete(DbSession dbSession, AlmPatDto almPatDto) { @@ -76,6 +76,4 @@ public class AlmPatDao implements Dao { getMapper(dbSession).deleteByAlmSetting(almSetting.getUuid()); } - - } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/pat/AlmPatMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/pat/AlmPatMapper.java index e4e5b6318b1..a43cbf397e1 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/pat/AlmPatMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/pat/AlmPatMapper.java @@ -30,9 +30,9 @@ public interface AlmPatMapper { @CheckForNull AlmPatDto selectByUserAndAlmSetting(@Param("userUuid") String userUuid, @Param("almSettingUuid") String almSettingUuid); - void insert(@Param("dto") AlmPatDto almPatDto, @Param("uuid") String uuid, @Param("now") long now); + void insert(@Param("dto") AlmPatDto almPatDto); - void update(@Param("dto") AlmPatDto almPatDto, @Param("now") long now); + void update(@Param("dto") AlmPatDto almPatDto); void deleteByUuid(@Param("uuid") String uuid); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/AlmSettingDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/AlmSettingDao.java index a70ba201087..dc7217c00d2 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/AlmSettingDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/AlmSettingDao.java @@ -43,10 +43,10 @@ public class AlmSettingDao implements Dao { public void insert(DbSession dbSession, AlmSettingDto almSettingDto) { String uuid = uuidFactory.create(); long now = system2.now(); - getMapper(dbSession).insert(almSettingDto, uuid, now); almSettingDto.setUuid(uuid); almSettingDto.setCreatedAt(now); almSettingDto.setUpdatedAt(now); + getMapper(dbSession).insert(almSettingDto); } public Optional selectByUuid(DbSession dbSession, String uuid) { @@ -61,18 +61,17 @@ public class AlmSettingDao implements Dao { return getMapper(dbSession).selectByAlm(alm.getId()); } - public List selectAll(DbSession dbSession) { return getMapper(dbSession).selectAll(); } - public void delete(DbSession dbSession, AlmSettingDto almSettingDto){ + public void delete(DbSession dbSession, AlmSettingDto almSettingDto) { getMapper(dbSession).deleteByKey(almSettingDto.getKey()); } public void update(DbSession dbSession, AlmSettingDto almSettingDto) { long now = system2.now(); - getMapper(dbSession).update(almSettingDto, now); almSettingDto.setUpdatedAt(now); + getMapper(dbSession).update(almSettingDto); } } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/AlmSettingMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/AlmSettingMapper.java index 86fa20a1297..49848605e24 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/AlmSettingMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/AlmSettingMapper.java @@ -35,9 +35,9 @@ public interface AlmSettingMapper { List selectAll(); - void insert(@Param("dto") AlmSettingDto almSettingDto, @Param("uuid") String uuid, @Param("now") long now); + void insert(@Param("dto") AlmSettingDto almSettingDto); - void update(@Param("dto") AlmSettingDto almSettingDto, @Param("now") long now); + void update(@Param("dto") AlmSettingDto almSettingDto); void deleteByKey(@Param("key") String key); } diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/pat/AlmPatMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/pat/AlmPatMapper.xml index 68f1fb44b89..b2a36d237ea 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/pat/AlmPatMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/pat/AlmPatMapper.xml @@ -41,12 +41,12 @@ updated_at ) VALUES ( - #{uuid, jdbcType=VARCHAR}, + #{dto.uuid, jdbcType=VARCHAR}, #{dto.personalAccessToken, jdbcType=VARCHAR}, #{dto.userUuid, jdbcType=VARCHAR}, #{dto.almSettingUuid, jdbcType=VARCHAR}, - #{now, jdbcType=BIGINT}, - #{now, jdbcType=BIGINT} + #{dto.createdAt, jdbcType=BIGINT}, + #{dto.updatedAt, jdbcType=BIGINT} ) @@ -54,7 +54,7 @@ UPDATE alm_pats pat = #{dto.personalAccessToken, jdbcType=VARCHAR}, - updated_at = #{now, jdbcType=BIGINT} + updated_at = #{dto.updatedAt, jdbcType=BIGINT} uuid = #{dto.uuid, jdbcType=VARCHAR} diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/setting/AlmSettingMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/setting/AlmSettingMapper.xml index f8c29ed4a3b..5a2a43e3f31 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/setting/AlmSettingMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/setting/AlmSettingMapper.xml @@ -59,15 +59,15 @@ updated_at ) VALUES ( - #{uuid, jdbcType=VARCHAR}, + #{dto.uuid, jdbcType=VARCHAR}, #{dto.key, jdbcType=VARCHAR}, #{dto.rawAlm, jdbcType=VARCHAR}, #{dto.url, jdbcType=VARCHAR}, #{dto.appId, jdbcType=VARCHAR}, #{dto.privateKey, jdbcType=VARCHAR}, #{dto.personalAccessToken, jdbcType=VARCHAR}, - #{now, jdbcType=BIGINT}, - #{now, jdbcType=BIGINT} + #{dto.createdAt, jdbcType=BIGINT}, + #{dto.updatedAt, jdbcType=BIGINT} ) @@ -79,7 +79,7 @@ app_id = #{dto.appId, jdbcType=VARCHAR}, private_key = #{dto.privateKey, jdbcType=VARCHAR}, pat = #{dto.personalAccessToken, jdbcType=VARCHAR}, - updated_at = #{now, jdbcType=BIGINT} + updated_at = #{dto.updatedAt, jdbcType=BIGINT} uuid = #{dto.uuid, jdbcType=VARCHAR} diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/alm/pat/ALMPatDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/alm/pat/AlmPatDaoTest.java similarity index 91% rename from server/sonar-db-dao/src/test/java/org/sonar/db/alm/pat/ALMPatDaoTest.java rename to server/sonar-db-dao/src/test/java/org/sonar/db/alm/pat/AlmPatDaoTest.java index ee087042404..a215bcaa73f 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/alm/pat/ALMPatDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/alm/pat/AlmPatDaoTest.java @@ -21,8 +21,7 @@ package org.sonar.db.alm.pat; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.sonar.api.utils.System2; +import org.sonar.api.impl.utils.TestSystem2; import org.sonar.core.util.UuidFactory; import org.sonar.db.DbSession; import org.sonar.db.DbTester; @@ -37,25 +36,23 @@ import static org.mockito.Mockito.when; import static org.sonar.db.alm.integration.pat.AlmPatsTesting.newAlmPatDto; import static org.sonar.db.almsettings.AlmSettingsTesting.newGithubAlmSettingDto; -public class ALMPatDaoTest { +public class AlmPatDaoTest { private static final long NOW = 1000000L; private static final String A_UUID = "SOME_UUID"; - @Rule - public ExpectedException expectedException = ExpectedException.none(); - private System2 system2 = mock(System2.class); + private TestSystem2 system2 = new TestSystem2().setNow(NOW); @Rule public DbTester db = DbTester.create(system2); private DbSession dbSession = db.getSession(); private UuidFactory uuidFactory = mock(UuidFactory.class); - private AlmPatDao underTest = new AlmPatDao(system2, uuidFactory); private AlmSettingDao almSettingDao = new AlmSettingDao(system2, uuidFactory); + private AlmPatDao underTest = new AlmPatDao(system2, uuidFactory); + @Test public void selectByUuid() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(NOW); AlmPatDto almPatDto = newAlmPatDto(); underTest.insert(dbSession, almPatDto); @@ -74,7 +71,6 @@ public class ALMPatDaoTest { @Test public void selectByAlmSetting() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(NOW); AlmSettingDto almSetting = newGithubAlmSettingDto(); almSettingDao.insert(dbSession, almSetting); @@ -98,14 +94,13 @@ public class ALMPatDaoTest { @Test public void update() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(NOW); AlmPatDto almPatDto = newAlmPatDto(); underTest.insert(dbSession, almPatDto); String updated_pat = "updated pat"; almPatDto.setPersonalAccessToken(updated_pat); - when(system2.now()).thenReturn(NOW + 1); + system2.setNow(NOW + 1); underTest.update(dbSession, almPatDto); AlmPatDto result = underTest.selectByUuid(dbSession, A_UUID).get(); @@ -116,13 +111,11 @@ public class ALMPatDaoTest { .containsExactly(A_UUID, updated_pat, almPatDto.getUserUuid(), almPatDto.getAlmSettingUuid(), NOW, NOW + 1); - } @Test public void delete() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(NOW); AlmPatDto almPat = newAlmPatDto(); underTest.insert(dbSession, almPat); @@ -134,7 +127,6 @@ public class ALMPatDaoTest { @Test public void deleteByUser() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(NOW); UserDto userDto = db.users().insertUser(); AlmPatDto almPat = newAlmPatDto(); almPat.setUserUuid(userDto.getUuid()); @@ -148,7 +140,6 @@ public class ALMPatDaoTest { @Test public void deleteByAlmSetting() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(NOW); AlmSettingDto almSettingDto = db.almSettings().insertBitbucketAlmSetting(); AlmPatDto almPat = newAlmPatDto(); almPat.setAlmSettingUuid(almSettingDto.getUuid()); diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/AlmSettingDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/AlmSettingDaoTest.java index aa68cbef03f..c5571d66943 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/AlmSettingDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/AlmSettingDaoTest.java @@ -22,8 +22,7 @@ package org.sonar.db.alm.setting; import java.util.List; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.sonar.api.utils.System2; +import org.sonar.api.impl.utils.TestSystem2; import org.sonar.core.util.UuidFactory; import org.sonar.db.DbSession; import org.sonar.db.DbTester; @@ -38,20 +37,18 @@ public class AlmSettingDaoTest { private static final long NOW = 1000000L; private static final String A_UUID = "SOME_UUID"; - @Rule - public ExpectedException expectedException = ExpectedException.none(); - private System2 system2 = mock(System2.class); + private TestSystem2 system2 = new TestSystem2().setNow(NOW); @Rule public DbTester db = DbTester.create(system2); private DbSession dbSession = db.getSession(); private UuidFactory uuidFactory = mock(UuidFactory.class); + private AlmSettingDao underTest = new AlmSettingDao(system2, uuidFactory); @Test public void selectByUuid() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(NOW); AlmSettingDto almSettingDto = newGithubAlmSettingDto(); underTest.insert(dbSession, almSettingDto); @@ -70,7 +67,6 @@ public class AlmSettingDaoTest { @Test public void selectByKey() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(NOW); AlmSettingDto almSettingDto = AlmSettingsTesting.newGithubAlmSettingDto(); underTest.insert(dbSession, almSettingDto); @@ -89,7 +85,6 @@ public class AlmSettingDaoTest { @Test public void selectByAlm() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(NOW); AlmSettingDto gitHubAlmSetting1 = db.almSettings().insertGitHubAlmSetting(); AlmSettingDto gitHubAlmSetting2 = db.almSettings().insertGitHubAlmSetting(); AlmSettingDto azureAlmSetting2 = db.almSettings().insertAzureAlmSetting(); @@ -104,7 +99,6 @@ public class AlmSettingDaoTest { @Test public void selectAll() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(NOW); underTest.insert(dbSession, newGithubAlmSettingDto()); when(uuidFactory.create()).thenReturn(A_UUID + "bis"); underTest.insert(dbSession, newGithubAlmSettingDto()); @@ -117,7 +111,6 @@ public class AlmSettingDaoTest { @Test public void update() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(NOW); AlmSettingDto almSettingDto = newGithubAlmSettingDto(); underTest.insert(dbSession, almSettingDto); @@ -127,7 +120,7 @@ public class AlmSettingDaoTest { almSettingDto.setPersonalAccessToken("updated pat"); almSettingDto.setKey("updated key"); - when(system2.now()).thenReturn(NOW + 1); + system2.setNow(NOW + 1); underTest.update(dbSession, almSettingDto); AlmSettingDto result = underTest.selectByUuid(dbSession, A_UUID).get(); @@ -143,7 +136,6 @@ public class AlmSettingDaoTest { @Test public void delete() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(NOW); AlmSettingDto almSettingDto = newGithubAlmSettingDto(); underTest.insert(dbSession, almSettingDto); diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/ProjectAlmSettingDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/ProjectAlmSettingDaoTest.java index 9a81c0d9b56..e38d84145ad 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/ProjectAlmSettingDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/ProjectAlmSettingDaoTest.java @@ -23,8 +23,7 @@ import java.util.HashSet; import java.util.Set; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.sonar.api.utils.System2; +import org.sonar.api.impl.utils.TestSystem2; import org.sonar.core.util.UuidFactory; import org.sonar.db.DbSession; import org.sonar.db.DbTester; @@ -43,9 +42,7 @@ public class ProjectAlmSettingDaoTest { private static final long A_DATE_LATER = 1_700_000_000_000L; private static final String A_UUID = "SOME_UUID"; - @Rule - public ExpectedException expectedException = ExpectedException.none(); - private System2 system2 = mock(System2.class); + private TestSystem2 system2 = new TestSystem2().setNow(A_DATE); @Rule public DbTester db = DbTester.create(system2); @@ -56,7 +53,6 @@ public class ProjectAlmSettingDaoTest { @Test public void select_by_project() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(A_DATE); AlmSettingDto githubAlmSettingDto = db.almSettings().insertGitHubAlmSetting(); ProjectDto project = db.components().insertPrivateProjectDto(); ProjectDto anotherProject = db.components().insertPrivateProjectDto(); @@ -78,7 +74,6 @@ public class ProjectAlmSettingDaoTest { @Test public void select_by_alm_setting_and_slugs() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(A_DATE); AlmSettingDto almSettingsDto = db.almSettings().insertBitbucketAlmSetting(); ProjectDto project = db.components().insertPrivateProjectDto(); ProjectAlmSettingDto bitbucketProjectAlmSettingDto = newBitbucketProjectAlmSettingDto(almSettingsDto, project); @@ -99,7 +94,6 @@ public class ProjectAlmSettingDaoTest { @Test public void select_with_no_slugs_return_empty() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(A_DATE); AlmSettingDto almSettingsDto = db.almSettings().insertBitbucketAlmSetting(); assertThat(underTest.selectByAlmSettingAndSlugs(dbSession, almSettingsDto, new HashSet<>())).isEmpty(); @@ -108,13 +102,12 @@ public class ProjectAlmSettingDaoTest { @Test public void update_existing_binding() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(A_DATE); AlmSettingDto githubAlmSetting = db.almSettings().insertGitHubAlmSetting(); ProjectDto project = db.components().insertPrivateProjectDto(); ProjectAlmSettingDto projectAlmSettingDto = db.almSettings().insertGitHubProjectAlmSetting(githubAlmSetting, project); AlmSettingDto anotherGithubAlmSetting = db.almSettings().insertGitHubAlmSetting(); - when(system2.now()).thenReturn(A_DATE_LATER); + system2.setNow(A_DATE_LATER); ProjectAlmSettingDto newProjectAlmSettingDto = newGithubProjectAlmSettingDto(anotherGithubAlmSetting, project) .setSummaryCommentEnabled(false); underTest.insertOrUpdate(dbSession, newProjectAlmSettingDto); @@ -132,7 +125,6 @@ public class ProjectAlmSettingDaoTest { @Test public void deleteByProject() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(A_DATE); AlmSettingDto githubAlmSetting = db.almSettings().insertGitHubAlmSetting(); ProjectDto project = db.components().insertPrivateProjectDto(); db.almSettings().insertGitHubProjectAlmSetting(githubAlmSetting, project); @@ -148,7 +140,6 @@ public class ProjectAlmSettingDaoTest { @Test public void deleteByAlmSetting() { when(uuidFactory.create()).thenReturn(A_UUID); - when(system2.now()).thenReturn(A_DATE); AlmSettingDto githubAlmSetting = db.almSettings().insertGitHubAlmSetting(); ProjectDto project1 = db.components().insertPrivateProjectDto(); ProjectDto project2 = db.components().insertPrivateProjectDto(); diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/sql/CreateTableBuilder.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/sql/CreateTableBuilder.java index 4eb83f1e442..2590ee446f8 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/sql/CreateTableBuilder.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/sql/CreateTableBuilder.java @@ -21,8 +21,6 @@ package org.sonar.server.platform.db.migration.sql; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import java.sql.Connection; -import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -32,8 +30,6 @@ import java.util.Locale; import java.util.stream.Stream; import javax.annotation.CheckForNull; import org.sonar.core.util.stream.MoreCollectors; -import org.sonar.db.Database; -import org.sonar.db.DatabaseUtils; import org.sonar.db.dialect.Dialect; import org.sonar.db.dialect.H2; import org.sonar.db.dialect.MsSql; @@ -68,12 +64,6 @@ public class CreateTableBuilder { this.tableName = validateTableName(tableName); } - public boolean tableExists(Database database) throws SQLException { - try (Connection connection = database.getDataSource().getConnection()) { - return DatabaseUtils.tableExists(tableName, connection); - } - } - public List build() { checkState(!columnDefs.isEmpty() || !pkColumnDefs.isEmpty(), "at least one column must be specified"); diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v80/CreateNewCodePeriodTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v80/CreateNewCodePeriodTable.java index a9089a05594..58f57596afb 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v80/CreateNewCodePeriodTable.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v80/CreateNewCodePeriodTable.java @@ -19,10 +19,8 @@ */ package org.sonar.server.platform.db.migration.version.v80; -import java.sql.Connection; import java.sql.SQLException; import org.sonar.db.Database; -import org.sonar.db.DatabaseUtils; import org.sonar.server.platform.db.migration.def.BigIntegerColumnDef; import org.sonar.server.platform.db.migration.def.VarcharColumnDef; import org.sonar.server.platform.db.migration.sql.CreateIndexBuilder; @@ -33,7 +31,6 @@ import static org.sonar.server.platform.db.migration.def.BigIntegerColumnDef.new import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.UUID_SIZE; import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.newVarcharColumnDefBuilder; - public class CreateNewCodePeriodTable extends DdlChange { private static final String TABLE_NAME = "new_code_periods"; @@ -84,16 +81,12 @@ public class CreateNewCodePeriodTable extends DdlChange { .setIsNullable(false) .build(); - public CreateNewCodePeriodTable(Database db) { super(db); } @Override public void execute(Context context) throws SQLException { - if (tableExists()) { - return; - } context.execute(new CreateTableBuilder(getDialect(), TABLE_NAME) .addPkColumn(UUID_COLUMN) .addColumn(PROJECT_UUID_COLUMN) @@ -113,9 +106,4 @@ public class CreateNewCodePeriodTable extends DdlChange { .build()); } - private boolean tableExists() throws SQLException { - try (Connection connection = getDatabase().getDataSource().getConnection()) { - return DatabaseUtils.tableExists(TABLE_NAME, connection); - } - } } diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v80/CreateProjectQualityGatesTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v80/CreateProjectQualityGatesTable.java index d71419e6f8c..b7e5d6227de 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v80/CreateProjectQualityGatesTable.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v80/CreateProjectQualityGatesTable.java @@ -19,10 +19,8 @@ */ package org.sonar.server.platform.db.migration.version.v80; -import java.sql.Connection; import java.sql.SQLException; import org.sonar.db.Database; -import org.sonar.db.DatabaseUtils; import org.sonar.server.platform.db.migration.SupportsBlueGreen; import org.sonar.server.platform.db.migration.def.VarcharColumnDef; import org.sonar.server.platform.db.migration.sql.CreateIndexBuilder; @@ -54,9 +52,6 @@ public class CreateProjectQualityGatesTable extends DdlChange { @Override public void execute(Context context) throws SQLException { - if (tableExists()) { - return; - } context.execute(new CreateTableBuilder(getDialect(), TABLE_NAME) .addPkColumn(PROJECT_UUID_COLUMN) .addColumn(QUALITY_GATE_UUID_COLUMN) @@ -70,10 +65,4 @@ public class CreateProjectQualityGatesTable extends DdlChange { .addColumn(QUALITY_GATE_UUID_COLUMN) .build()); } - - private boolean tableExists() throws SQLException { - try (Connection connection = getDatabase().getDataSource().getConnection()) { - return DatabaseUtils.tableExists(TABLE_NAME, connection); - } - } } diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v81/CreateAlmSettingsTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v81/CreateAlmSettingsTable.java index 5a52f1fe8e0..97a249cf1ef 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v81/CreateAlmSettingsTable.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v81/CreateAlmSettingsTable.java @@ -19,10 +19,8 @@ */ package org.sonar.server.platform.db.migration.version.v81; -import java.sql.Connection; import java.sql.SQLException; import org.sonar.db.Database; -import org.sonar.db.DatabaseUtils; import org.sonar.server.platform.db.migration.def.VarcharColumnDef; import org.sonar.server.platform.db.migration.sql.CreateIndexBuilder; import org.sonar.server.platform.db.migration.sql.CreateTableBuilder; @@ -48,9 +46,6 @@ public class CreateAlmSettingsTable extends DdlChange { @Override public void execute(Context context) throws SQLException { - if (tableExists()) { - return; - } context.execute(new CreateTableBuilder(getDialect(), TABLE_NAME) .addPkColumn(newVarcharColumnDefBuilder() .setColumnName("uuid") @@ -100,10 +95,4 @@ public class CreateAlmSettingsTable extends DdlChange { .setUnique(true) .build()); } - - private boolean tableExists() throws SQLException { - try (Connection connection = getDatabase().getDataSource().getConnection()) { - return DatabaseUtils.tableExists(TABLE_NAME, connection); - } - } } diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v81/CreateProjectAlmSettingsTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v81/CreateProjectAlmSettingsTable.java index 40e23dc1b2b..4eb499d5a1e 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v81/CreateProjectAlmSettingsTable.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v81/CreateProjectAlmSettingsTable.java @@ -19,10 +19,8 @@ */ package org.sonar.server.platform.db.migration.version.v81; -import java.sql.Connection; import java.sql.SQLException; import org.sonar.db.Database; -import org.sonar.db.DatabaseUtils; import org.sonar.server.platform.db.migration.def.VarcharColumnDef; import org.sonar.server.platform.db.migration.sql.CreateIndexBuilder; import org.sonar.server.platform.db.migration.sql.CreateTableBuilder; @@ -55,9 +53,6 @@ public class CreateProjectAlmSettingsTable extends DdlChange { @Override public void execute(Context context) throws SQLException { - if (tableExists()) { - return; - } context.execute(new CreateTableBuilder(getDialect(), TABLE_NAME) .addPkColumn(newVarcharColumnDefBuilder() .setColumnName("uuid") @@ -99,10 +94,4 @@ public class CreateProjectAlmSettingsTable extends DdlChange { .setName("project_alm_settings_alm") .build()); } - - private boolean tableExists() throws SQLException { - try (Connection connection = getDatabase().getDataSource().getConnection()) { - return DatabaseUtils.tableExists(TABLE_NAME, connection); - } - } } diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/CreateAlmPatsTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/CreateAlmPatsTable.java index cc62e43372e..a7851e1a69d 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/CreateAlmPatsTable.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/CreateAlmPatsTable.java @@ -19,10 +19,8 @@ */ package org.sonar.server.platform.db.migration.version.v82; -import java.sql.Connection; import java.sql.SQLException; import org.sonar.db.Database; -import org.sonar.db.DatabaseUtils; import org.sonar.server.platform.db.migration.def.VarcharColumnDef; import org.sonar.server.platform.db.migration.sql.CreateIndexBuilder; import org.sonar.server.platform.db.migration.sql.CreateTableBuilder; @@ -54,10 +52,6 @@ public class CreateAlmPatsTable extends DdlChange { @Override public void execute(Context context) throws SQLException { - if (tableExists()) { - return; - } - context.execute(new CreateTableBuilder(getDialect(), TABLE_NAME) .addPkColumn(newVarcharColumnDefBuilder() .setColumnName("uuid") @@ -89,10 +83,4 @@ public class CreateAlmPatsTable extends DdlChange { .setUnique(true) .build()); } - - private boolean tableExists() throws SQLException { - try (Connection connection = getDatabase().getDataSource().getConnection()) { - return DatabaseUtils.tableExists(TABLE_NAME, connection); - } - } } diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/CreateProjectsTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/CreateProjectsTable.java index 4af23a6dcfa..c01a40e3c45 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/CreateProjectsTable.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v82/CreateProjectsTable.java @@ -19,10 +19,8 @@ */ package org.sonar.server.platform.db.migration.version.v82; -import java.sql.Connection; import java.sql.SQLException; import org.sonar.db.Database; -import org.sonar.db.DatabaseUtils; import org.sonar.server.platform.db.migration.def.BigIntegerColumnDef; import org.sonar.server.platform.db.migration.def.BooleanColumnDef; import org.sonar.server.platform.db.migration.def.VarcharColumnDef; @@ -90,9 +88,6 @@ public class CreateProjectsTable extends DdlChange { @Override public void execute(Context context) throws SQLException { - if (tableExists()) { - return; - } context.execute(new CreateTableBuilder(getDialect(), TABLE_NAME) .withPkConstraintName("pk_new_projects") .addPkColumn(UUID_COLUMN) @@ -120,10 +115,4 @@ public class CreateProjectsTable extends DdlChange { .addColumn(QUALIFIER_COLUMN) .build()); } - - private boolean tableExists() throws SQLException { - try (Connection connection = getDatabase().getDataSource().getConnection()) { - return DatabaseUtils.tableExists(TABLE_NAME, connection); - } - } } diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v80/CreateNewCodePeriodTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v80/CreateNewCodePeriodTableTest.java index 99d924cd38b..eb2c74bc276 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v80/CreateNewCodePeriodTableTest.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v80/CreateNewCodePeriodTableTest.java @@ -54,9 +54,6 @@ public class CreateNewCodePeriodTableTest { dbTester.assertColumnDefinition(TABLE_NAME, "value", VARCHAR, 40, true); dbTester.assertColumnDefinition(TABLE_NAME, "updated_at", BIGINT, 20, false); dbTester.assertColumnDefinition(TABLE_NAME, "created_at", BIGINT, 20, false); - - //script should not fail if executed twice - underTest.execute(); } } diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v80/CreateProjectQualityGatesTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v80/CreateProjectQualityGatesTableTest.java index e03de5ee0f2..18a59ab29b0 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v80/CreateProjectQualityGatesTableTest.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v80/CreateProjectQualityGatesTableTest.java @@ -48,8 +48,5 @@ public class CreateProjectQualityGatesTableTest { dbTester.assertColumnDefinition(TABLE_NAME, "project_uuid", VARCHAR, 40, false); dbTester.assertColumnDefinition(TABLE_NAME, "quality_gate_uuid", VARCHAR, 40, false); - - //script should not fail if executed twice - underTest.execute(); } } diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v81/CreateAlmSettingsTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v81/CreateAlmSettingsTableTest.java index 345d87619b6..02ce0f1caec 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v81/CreateAlmSettingsTableTest.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v81/CreateAlmSettingsTableTest.java @@ -57,9 +57,6 @@ public class CreateAlmSettingsTableTest { dbTester.assertColumnDefinition(TABLE_NAME, "pat", VARCHAR, 2000, true); dbTester.assertColumnDefinition(TABLE_NAME, "updated_at", BIGINT, 20, false); dbTester.assertColumnDefinition(TABLE_NAME, "created_at", BIGINT, 20, false); - - // script should not fail if executed twice - underTest.execute(); } } diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v81/CreateProjectAlmSettingsTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v81/CreateProjectAlmSettingsTableTest.java index 1d3c9d5e17d..91e82b6c9a0 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v81/CreateProjectAlmSettingsTableTest.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v81/CreateProjectAlmSettingsTableTest.java @@ -55,8 +55,5 @@ public class CreateProjectAlmSettingsTableTest { dbTester.assertColumnDefinition(TABLE_NAME, "alm_slug", VARCHAR, 256, true); dbTester.assertColumnDefinition(TABLE_NAME, "updated_at", BIGINT, 20, false); dbTester.assertColumnDefinition(TABLE_NAME, "created_at", BIGINT, 20, false); - - // script should not fail if executed twice - underTest.execute(); } } diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/CreateAlmPATsTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/CreateAlmPATsTableTest.java index cbc1001a1fa..0b87f0b1a50 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/CreateAlmPATsTableTest.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/CreateAlmPATsTableTest.java @@ -54,9 +54,6 @@ public class CreateAlmPATsTableTest { dbTester.assertColumnDefinition(TABLE_NAME, "alm_setting_uuid", VARCHAR, 40, false); dbTester.assertColumnDefinition(TABLE_NAME, "updated_at", BIGINT, 20, false); dbTester.assertColumnDefinition(TABLE_NAME, "created_at", BIGINT, 20, false); - - // script should not fail if executed twice - underTest.execute(); } } diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/CreateProjectsTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/CreateProjectsTableTest.java index 23819e69063..ed3a8b313ca 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/CreateProjectsTableTest.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/CreateProjectsTableTest.java @@ -58,8 +58,5 @@ public class CreateProjectsTableTest { dbTester.assertColumnDefinition(TABLE_NAME, "tags", VARCHAR, 500, true); dbTester.assertColumnDefinition(TABLE_NAME, "created_at", BIGINT, null, true); dbTester.assertColumnDefinition(TABLE_NAME, "updated_at", BIGINT, null, false); - - // script should not fail if executed twice - underTest.execute(); } } diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/RenameProjectsTableToComponentsTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/RenameProjectsTableToComponentsTest.java index 4f48be53817..30b12b3dcc3 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/RenameProjectsTableToComponentsTest.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v82/RenameProjectsTableToComponentsTest.java @@ -26,7 +26,7 @@ import org.junit.rules.ExpectedException; import org.sonar.db.CoreDbTester; public class RenameProjectsTableToComponentsTest { - private static final String TABLE_NAME = "projects"; + private static final String OLD_TABLE_NAME = "projects"; private static final String NEW_TABLE_NAME = "components"; @Rule @@ -35,27 +35,24 @@ public class RenameProjectsTableToComponentsTest { @Rule public ExpectedException expectedException = ExpectedException.none(); - private CreateProjectsTable underTest = new CreateProjectsTable(dbTester.database()); + private RenameProjectsTableToComponents underTest = new RenameProjectsTableToComponents(dbTester.database()); @Test public void table_has_been_renamed() throws SQLException { - underTest.execute(); - dbTester.assertTableExists(TABLE_NAME); - dbTester.assertPrimaryKey(TABLE_NAME, "pk_projects", "id"); - - dbTester.assertIndex(TABLE_NAME, "PROJECTS_ORGANIZATION", "organization_uuid"); - dbTester.assertUniqueIndex(TABLE_NAME, "PROJECTS_KEE", "kee"); - dbTester.assertIndex(TABLE_NAME, "PROJECTS_ROOT_UUID", "root_uuid"); - dbTester.assertUniqueIndex(TABLE_NAME, "PROJECTS_UUID", "uuid"); - dbTester.assertIndex(TABLE_NAME, "PROJECTS_PROJECT_UUID", "project_uuid"); - dbTester.assertIndex(TABLE_NAME, "PROJECTS_MODULE_UUID", "module_uuid"); - dbTester.assertIndex(TABLE_NAME, "PROJECTS_QUALIFIER", "qualifier"); + dbTester.assertTableDoesNotExist(OLD_TABLE_NAME); - underTest.execute(); + dbTester.assertTableExists(NEW_TABLE_NAME); + dbTester.assertPrimaryKey(NEW_TABLE_NAME, "pk_projects", "id"); - dbTester.assertTableExists(TABLE_NAME); + dbTester.assertIndex(NEW_TABLE_NAME, "PROJECTS_ORGANIZATION", "organization_uuid"); + dbTester.assertUniqueIndex(NEW_TABLE_NAME, "PROJECTS_KEE", "kee"); + dbTester.assertIndex(NEW_TABLE_NAME, "PROJECTS_ROOT_UUID", "root_uuid"); + dbTester.assertUniqueIndex(NEW_TABLE_NAME, "PROJECTS_UUID", "uuid"); + dbTester.assertIndex(NEW_TABLE_NAME, "PROJECTS_PROJECT_UUID", "project_uuid"); + dbTester.assertIndex(NEW_TABLE_NAME, "PROJECTS_MODULE_UUID", "module_uuid"); + dbTester.assertIndex(NEW_TABLE_NAME, "PROJECTS_QUALIFIER", "qualifier"); } } -- 2.39.5