From 748f9eb46923b2522d47ab998ba03abdf5eb47d7 Mon Sep 17 00:00:00 2001 From: Eric Hartmann Date: Wed, 14 Nov 2018 16:22:33 +0100 Subject: [PATCH] SONAR-10763 Add selectByAnalysisUuids on EventComponentChangeDao --- .../db/event/EventComponentChangeDao.java | 6 + .../db/event/EventComponentChangeMapper.java | 2 + .../db/event/EventComponentChangeMapper.xml | 8 ++ .../db/event/EventComponentChangeDaoTest.java | 111 ++++++++++++++++++ 4 files changed, 127 insertions(+) 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 selectByAnalysisUuids(DbSession dbSession, List 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 selectByEventUuid(@Param("eventUuid") String eventUuid); + List selectByAnalysisUuids(@Param("analysisUuids") List 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} + + 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; @@ -98,6 +100,49 @@ public class EventComponentChangeDaoTest { now)); } + @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); @@ -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)]; } -- 2.39.5