diff options
author | Eric Hartmann <hartmann.eric@gmail.com> | 2018-11-14 16:22:33 +0100 |
---|---|---|
committer | SonarTech <sonartech@sonarsource.com> | 2018-11-20 20:21:00 +0100 |
commit | 748f9eb46923b2522d47ab998ba03abdf5eb47d7 (patch) | |
tree | ba8c566147e495e628064e7242c73ba1ca93ab4e /server/sonar-db-dao | |
parent | 361083428bf57ebeebf88b69fd2b466d3c013e4f (diff) | |
download | sonarqube-748f9eb46923b2522d47ab998ba03abdf5eb47d7.tar.gz sonarqube-748f9eb46923b2522d47ab998ba03abdf5eb47d7.zip |
SONAR-10763 Add selectByAnalysisUuids on EventComponentChangeDao
Diffstat (limited to 'server/sonar-db-dao')
4 files changed, 127 insertions, 0 deletions
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/event/EventComponentChangeDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/event/EventComponentChangeDao.java index 00dfee02893..7b209d74f7c 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/event/EventComponentChangeDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/event/EventComponentChangeDao.java @@ -24,6 +24,8 @@ import org.sonar.api.utils.System2; import org.sonar.db.Dao; import org.sonar.db.DbSession; +import static org.sonar.db.DatabaseUtils.executeLargeInputs; + public class EventComponentChangeDao implements Dao { private final System2 system2; @@ -35,6 +37,10 @@ public class EventComponentChangeDao implements Dao { return getMapper(dbSession).selectByEventUuid(eventUuid); } + public List<EventComponentChangeDto> selectByAnalysisUuids(DbSession dbSession, List<String> analyses) { + return executeLargeInputs(analyses, getMapper(dbSession)::selectByAnalysisUuids); + } + public void insert(DbSession dbSession, EventComponentChangeDto dto, EventPurgeData eventPurgeData) { getMapper(dbSession) .insert(dto, eventPurgeData, system2.now()); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/event/EventComponentChangeMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/event/EventComponentChangeMapper.java index 065e3419bca..89ecad57265 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/event/EventComponentChangeMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/event/EventComponentChangeMapper.java @@ -25,5 +25,7 @@ import org.apache.ibatis.annotations.Param; public interface EventComponentChangeMapper { List<EventComponentChangeDto> selectByEventUuid(@Param("eventUuid") String eventUuid); + List<EventComponentChangeDto> selectByAnalysisUuids(@Param("analysisUuids") List<String> analysisUuids); + void insert(@Param("dto") EventComponentChangeDto dto, @Param("purgeData") EventPurgeData eventPurgeData, @Param("createdAt") long createdAt); } diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/event/EventComponentChangeMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/event/EventComponentChangeMapper.xml index ecc8d6a6168..b7f7885acda 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/event/EventComponentChangeMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/event/EventComponentChangeMapper.xml @@ -21,6 +21,14 @@ ecc.event_uuid=#{eventUuid, jdbcType=VARCHAR} </select> + <select id="selectByAnalysisUuids" parameterType="Map" resultType="org.sonar.db.event.EventComponentChangeDto"> + select + <include refid="columns"/> + from event_component_changes ecc + where + ecc.event_analysis_uuid in <foreach collection="analysisUuids" open="(" close=")" item="analysisUuid" separator=",">#{analysisUuid}</foreach> + </select> + <insert id="insert"> INSERT INTO event_component_changes ( uuid, diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/event/EventComponentChangeDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/event/EventComponentChangeDaoTest.java index ac238f29ba6..2a9e75c7ddb 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/event/EventComponentChangeDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/event/EventComponentChangeDaoTest.java @@ -20,6 +20,7 @@ package org.sonar.db.event; import java.util.Arrays; +import java.util.Collections; import java.util.Random; import java.util.stream.IntStream; import org.junit.Rule; @@ -30,6 +31,7 @@ import org.sonar.db.DbSession; import org.sonar.db.DbTester; import org.sonar.db.event.EventComponentChangeDto.ChangeCategory; +import static java.util.Collections.singletonList; import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; @@ -99,6 +101,49 @@ public class EventComponentChangeDaoTest { } @Test + public void selectByAnalysisUuids_maps_columns_correctly() { + String eventBase = randomAlphabetic(5); + String rowBase = randomAlphabetic(6); + String eventUuid = eventBase + "_event_uuid"; + String uuid = rowBase + "_uuid"; + EventComponentChangeDto dto = new EventComponentChangeDto() + .setCategory(randomChangeCategory()) + .setUuid(uuid) + .setEventUuid(eventUuid) + .setComponentUuid(rowBase + "_component_uuid") + .setComponentKey(rowBase + "_component_key") + .setComponentName(rowBase + "_component_name") + .setComponentBranchKey(rowBase + "_component_branch_key"); + EventPurgeData purgeData = new EventPurgeData(eventBase + "_component_uuid", eventBase + "_analysis_uuid"); + long now = random.nextLong(); + when(system2.now()).thenReturn(now); + + underTest.insert(dbSession, dto, purgeData); + + assertThat(underTest.selectByAnalysisUuids(dbSession, Collections.emptyList())) + .isEmpty(); + assertThat(underTest.selectByAnalysisUuids(dbSession, singletonList(eventBase + "_analysis_uuid"))) + .extracting( + EventComponentChangeDto::getUuid, + EventComponentChangeDto::getCategory, + EventComponentChangeDto::getEventUuid, + EventComponentChangeDto::getComponentUuid, + EventComponentChangeDto::getComponentKey, + EventComponentChangeDto::getComponentName, + EventComponentChangeDto::getComponentBranchKey, + EventComponentChangeDto::getCreatedAt) + .containsOnly(tuple( + dto.getUuid(), + dto.getCategory(), + dto.getEventUuid(), + dto.getComponentUuid(), + dto.getComponentKey(), + dto.getComponentName(), + dto.getComponentBranchKey(), + now)); + } + + @Test public void selectByEventUuid_branchKey_can_be_null() { String eventBase = randomAlphabetic(5); String rowBase = randomAlphabetic(6); @@ -196,6 +241,72 @@ public class EventComponentChangeDaoTest { now + 4)); } + @Test + public void selectByAnalysisUuids_returns_all_rows_for_specified_event() { + String eventBase = randomAlphabetic(5); + String rowBase = randomAlphabetic(6); + String eventUuid1 = eventBase + "_event_uuid1"; + String eventUuid2 = eventBase + "_event_uuid2"; + EventComponentChangeDto[] event1Dtos = IntStream.range(0, 3) + .mapToObj(i -> new EventComponentChangeDto() + .setCategory(randomChangeCategory()) + .setUuid(rowBase + eventUuid1 + i) + .setEventUuid(eventUuid1) + .setComponentUuid(rowBase + eventUuid1 + "_component_uuid" + i) + .setComponentKey(rowBase + "_component_key") + .setComponentName(rowBase + "_component_name") + .setComponentBranchKey(null)) + .toArray(EventComponentChangeDto[]::new); + EventComponentChangeDto[] event2Dtos = IntStream.range(0, 2) + .mapToObj(i -> new EventComponentChangeDto() + .setCategory(randomChangeCategory()) + .setUuid(rowBase + eventUuid2 + i) + .setEventUuid(eventUuid2) + .setComponentUuid(rowBase + eventUuid2 + "_component_uuid" + i) + .setComponentKey(rowBase + "_component_key") + .setComponentName(rowBase + "_component_name") + .setComponentBranchKey(null)) + .toArray(EventComponentChangeDto[]::new); + EventPurgeData doesNotMatter = new EventPurgeData(randomAlphabetic(7), randomAlphabetic(8)); + long now = random.nextLong(); + when(system2.now()).thenReturn(now) + .thenReturn(now + 1) + .thenReturn(now + 2) + .thenReturn(now + 3) + .thenReturn(now + 4) + .thenThrow(new IllegalStateException("now should not be called 6 times")); + + Arrays.stream(event1Dtos).forEach(dto -> underTest.insert(dbSession, dto, doesNotMatter)); + Arrays.stream(event2Dtos).forEach(dto -> underTest.insert(dbSession, dto, doesNotMatter)); + + assertThat(underTest.selectByAnalysisUuids(dbSession, singletonList(doesNotMatter.getAnalysisUuid()))) + .extracting( + EventComponentChangeDto::getUuid, + EventComponentChangeDto::getEventUuid, + EventComponentChangeDto::getCreatedAt) + .containsOnly( + tuple( + event1Dtos[0].getUuid(), + eventUuid1, + now), + tuple( + event1Dtos[1].getUuid(), + eventUuid1, + now + 1), + tuple( + event1Dtos[2].getUuid(), + eventUuid1, + now + 2), + tuple( + event2Dtos[0].getUuid(), + eventUuid2, + now + 3), + tuple( + event2Dtos[1].getUuid(), + eventUuid2, + now + 4)); + } + private static ChangeCategory randomChangeCategory() { return ChangeCategory.values()[random.nextInt(ChangeCategory.values().length)]; } |