aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao
diff options
context:
space:
mode:
authorEric Hartmann <hartmann.eric@gmail.com>2018-11-14 16:22:33 +0100
committerSonarTech <sonartech@sonarsource.com>2018-11-20 20:21:00 +0100
commit748f9eb46923b2522d47ab998ba03abdf5eb47d7 (patch)
treeba8c566147e495e628064e7242c73ba1ca93ab4e /server/sonar-db-dao
parent361083428bf57ebeebf88b69fd2b466d3c013e4f (diff)
downloadsonarqube-748f9eb46923b2522d47ab998ba03abdf5eb47d7.tar.gz
sonarqube-748f9eb46923b2522d47ab998ba03abdf5eb47d7.zip
SONAR-10763 Add selectByAnalysisUuids on EventComponentChangeDao
Diffstat (limited to 'server/sonar-db-dao')
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/event/EventComponentChangeDao.java6
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/event/EventComponentChangeMapper.java2
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/event/EventComponentChangeMapper.xml8
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/event/EventComponentChangeDaoTest.java111
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)];
}