aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java13
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueListQuery.java14
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml9
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=",">