diff options
3 files changed, 36 insertions, 0 deletions
diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java index f65f56f6129..d1f9ba2bb44 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java @@ -875,6 +875,19 @@ public class IssueDaoIT { } @Test + public void selectIssueKeysByQuery_whenFilteredWithSoftwareQualities_shouldGetThoseIssuesOnly() { + prepareTables(); // One of the issues has software quality impact: SECURITY + + List<String> results = underTest.selectIssueKeysByQuery( + db.getSession(), + newIssueListQueryBuilder().project(PROJECT_KEY).softwareQualities(List.of("SECURITY")).build(), + Pagination.forPage(1).andSize(10)); + + List<String> expectedKeys = List.of("I1"); + assertThat(results.stream().toList()).containsExactlyInAnyOrderElementsOf(expectedKeys); + } + + @Test public void updateIfBeforeSelectedDate_whenCalledWithBeforeSelectDate_shouldUpdateImpacts() { prepareTables(); IssueDto issueDto = underTest.selectOrFailByKey(db.getSession(), ISSUE_KEY1) diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueListQuery.java b/server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueListQuery.java index 217f047ab6c..185692e70e8 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueListQuery.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueListQuery.java @@ -38,6 +38,7 @@ public class IssueListQuery { private final Collection<Integer> types; private final Collection<String> statuses; private final Collection<String> resolutions; + private final Collection<String> softwareQualities; private IssueListQuery(IssueListQueryBuilder issueListQueryBuilder) { this.project = issueListQueryBuilder.project; @@ -56,6 +57,9 @@ public class IssueListQuery { this.resolutions = ofNullable(issueListQueryBuilder.resolutions) .map(Collections::unmodifiableCollection) .orElse(emptyList()); + this.softwareQualities = ofNullable(issueListQueryBuilder.softwareQualities) + .map(Collections::unmodifiableCollection) + .orElse(emptyList()); } public String getProject() { @@ -98,6 +102,10 @@ public class IssueListQuery { return resolutions; } + public Collection<String> getSoftwareQualities() { + return softwareQualities; + } + public static final class IssueListQueryBuilder { private String project; private String branch; @@ -109,6 +117,7 @@ public class IssueListQuery { private Collection<Integer> types; private Collection<String> statuses; private Collection<String> resolutions; + private Collection<String> softwareQualities; private IssueListQueryBuilder() { } @@ -167,6 +176,11 @@ public class IssueListQuery { return this; } + public IssueListQueryBuilder softwareQualities(Collection<String> softwareQualities) { + this.softwareQualities = softwareQualities; + return this; + } + public IssueListQuery build() { return new IssueListQuery(this); } diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml index 5332d687721..9e042bc90f7 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml @@ -668,6 +668,9 @@ inner join components root on root.uuid=i.project_uuid inner join project_branches pb on pb.uuid=i.project_uuid left join new_code_reference_issues n on i.kee = n.issue_key + <if test="query.softwareQualities.size() > 0"> + left join issues_impacts im on i.kee = im.issue_key + </if> <where> <if test="query.project != null"> root.kee = #{query.project,jdbcType=VARCHAR} @@ -687,6 +690,12 @@ #{type,jdbcType=VARCHAR} </foreach> </if> + <if test="query.softwareQualities.size() > 0"> + AND im.software_quality IN + <foreach collection="query.softwareQualities" open="(" close=")" item="type" separator=","> + #{type,jdbcType=VARCHAR} + </foreach> + </if> <if test="query.statuses.size() > 0"> AND i.status IN <foreach collection="query.statuses" open="(" close=")" item="status" separator=","> |