aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-core
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2014-05-19 17:15:49 +0200
committerJulien Lancelot <julien.lancelot@sonarsource.com>2014-05-19 17:34:43 +0200
commit84c3361acbf85b6d5d02ddee7d353f5491fbbd7f (patch)
tree9a296336c03cdb131ffab2d782886f0f213020e4 /sonar-core
parentaed2044771ab27fe29061d0c6924f2c892c28739 (diff)
downloadsonarqube-84c3361acbf85b6d5d02ddee7d353f5491fbbd7f.tar.gz
sonarqube-84c3361acbf85b6d5d02ddee7d353f5491fbbd7f.zip
SONAR-5305 Return aggregation of rules and severities. Return snapshot date in periods
Diffstat (limited to 'sonar-core')
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/db/IssueDao.java21
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/db/IssueMapper.java5
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml22
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/issue/db/IssueStatsMapper.xml6
-rw-r--r--sonar-core/src/test/java/org/sonar/core/issue/db/IssueDaoTest.java18
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/find_rules_by_component.xml80
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/find_severities_by_component.xml100
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/shared.xml4
8 files changed, 251 insertions, 5 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDao.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDao.java
index f5662628586..44bfdb9de51 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDao.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDao.java
@@ -28,6 +28,7 @@ import org.sonar.api.BatchComponent;
import org.sonar.api.ServerComponent;
import org.sonar.api.issue.IssueQuery;
import org.sonar.core.persistence.MyBatis;
+import org.sonar.core.rule.RuleDto;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
@@ -138,4 +139,24 @@ public class IssueDao implements BatchComponent, ServerComponent {
}
return dtosList;
}
+
+ // TODO replace by aggregation in IssueIndex
+ public List<RuleDto> findRulesByComponent(String componentKey) {
+ SqlSession session = mybatis.openSession(false);
+ try {
+ return session.getMapper(IssueMapper.class).findRulesByComponent(componentKey);
+ } finally {
+ MyBatis.closeQuietly(session);
+ }
+ }
+
+ // TODO replace by aggregation in IssueIndex
+ public List<String> findSeveritiesByComponent(String componentKey) {
+ SqlSession session = mybatis.openSession(false);
+ try {
+ return session.getMapper(IssueMapper.class).findSeveritiesByComponent(componentKey);
+ } finally {
+ MyBatis.closeQuietly(session);
+ }
+ }
}
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueMapper.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueMapper.java
index 600b5e4f8c2..7204be2b572 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueMapper.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueMapper.java
@@ -21,6 +21,7 @@ package org.sonar.core.issue.db;
import org.apache.ibatis.annotations.Param;
import org.sonar.api.issue.IssueQuery;
+import org.sonar.core.rule.RuleDto;
import javax.annotation.Nullable;
@@ -47,6 +48,10 @@ public interface IssueMapper {
@Nullable @Param("userId") Integer userId, @Nullable @Param("role") String role);
+ List<RuleDto> findRulesByComponent(String componentKey);
+
+ List<String> findSeveritiesByComponent(String componentKey);
+
void insert(IssueDto issue);
int update(IssueDto issue);
diff --git a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml
index 785410c1ae2..3180427721c 100644
--- a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml
@@ -314,5 +314,27 @@
</where>
</sql>
+ <select id="findRulesByComponent" parameterType="String" resultType="Rule">
+ SELECT <include refid="org.sonar.core.rule.RuleMapper.selectColumns" />
+ FROM issues i
+ INNER JOIN projects p on p.id=i.component_id
+ INNER JOIN rules r on r.id=i.rule_id
+ <where>
+ AND p.kee=#{componentKey}
+ AND i.resolution IS NULL
+ </where>
+ </select>
+
+ <select id="findSeveritiesByComponent" parameterType="String" resultType="String">
+ SELECT i.severity
+ FROM issues i
+ INNER JOIN projects on projects.id=i.component_id
+ INNER JOIN rules on rules.id=i.rule_id
+ <where>
+ AND projects.kee=#{componentKey}
+ AND i.resolution IS NULL
+ </where>
+ </select>
+
</mapper>
diff --git a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueStatsMapper.xml b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueStatsMapper.xml
index 5369af45148..a721832a98a 100644
--- a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueStatsMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueStatsMapper.xml
@@ -5,12 +5,12 @@
<mapper namespace="org.sonar.core.issue.db.IssueStatsMapper">
<select id="selectIssuesColumn" parameterType="map" resultType="Object">
- select
+ SELECT
<if test="'ASSIGNEE'.equals(column)">
i.assignee
</if>
- from issues i
+ FROM issues i
<include refid="org.sonar.core.issue.db.IssueMapper.selectQueryConditions"/>
</select>
-</mapper> \ No newline at end of file
+</mapper>
diff --git a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDaoTest.java b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDaoTest.java
index 196b10204e0..cf8dc4a3d3b 100644
--- a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDaoTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDaoTest.java
@@ -27,8 +27,10 @@ import org.junit.Before;
import org.junit.Test;
import org.sonar.api.issue.IssueQuery;
import org.sonar.api.rule.RuleKey;
+import org.sonar.api.rule.Severity;
import org.sonar.api.utils.DateUtils;
import org.sonar.core.persistence.AbstractDaoTestCase;
+import org.sonar.core.rule.RuleDto;
import java.util.List;
@@ -428,6 +430,22 @@ public class IssueDaoTest extends AbstractDaoTestCase {
assertThat(issue.getRootComponentKey()).isEqualTo("struts");
}
+ @Test
+ public void find_rules_by_component() {
+ setupData("shared", "find_rules_by_component");
+
+ List<RuleDto> results = dao.findRulesByComponent("Action.java");
+ assertThat(results).hasSize(3);
+ }
+
+ @Test
+ public void find_severities_by_component() {
+ setupData("shared", "find_severities_by_component");
+
+ List<String> results = dao.findSeveritiesByComponent("Action.java");
+ assertThat(results).containsExactly(Severity.BLOCKER, Severity.MAJOR, Severity.BLOCKER);
+ }
+
private List<Long> getIssueIds(List<IssueDto> issues) {
return newArrayList(Iterables.transform(issues, new Function<IssueDto, Long>() {
@Override
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/find_rules_by_component.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/find_rules_by_component.xml
new file mode 100644
index 00000000000..d396550e94d
--- /dev/null
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/find_rules_by_component.xml
@@ -0,0 +1,80 @@
+<dataset>
+
+ <!-- rule 500 -->
+ <issues
+ id="100"
+ kee="ABCDE-1"
+ component_id="401"
+ root_component_id="399"
+ rule_id="500"
+ severity="BLOCKER"
+ manual_severity="[false]"
+ message="[null]"
+ line="200"
+ effort_to_fix="4.2"
+ status="OPEN"
+ resolution="[null]"
+ checksum="XXX"
+ reporter="arthur"
+ assignee="perceval"
+ author_login="[null]"
+ issue_attributes="JIRA=FOO-1234"
+ issue_creation_date="2013-04-16"
+ issue_update_date="2013-04-16"
+ issue_close_date="2013-04-16"
+ created_at="2013-04-16"
+ updated_at="2013-04-16"
+ />
+
+ <issues
+ id="101"
+ kee="ABCDE-2"
+ component_id="401"
+ root_component_id="399"
+ rule_id="500"
+ severity="BLOCKER"
+ manual_severity="[false]"
+ message="[null]"
+ line="200"
+ effort_to_fix="4.2"
+ status="OPEN"
+ resolution="[null]"
+ checksum="XXX"
+ reporter="arthur"
+ assignee="perceval"
+ author_login="[null]"
+ issue_attributes="JIRA=FOO-1234"
+ issue_creation_date="2013-04-16"
+ issue_update_date="2013-04-16"
+ issue_close_date="2013-04-16"
+ created_at="2013-04-16"
+ updated_at="2013-04-16"
+ />
+
+
+ <!-- rule 501 -->
+ <issues
+ id="102"
+ kee="ABCDE-3"
+ component_id="401"
+ root_component_id="399"
+ rule_id="501"
+ severity="BLOCKER"
+ manual_severity="[false]"
+ message="[null]"
+ line="200"
+ effort_to_fix="4.2"
+ status="OPEN"
+ resolution="[null]"
+ checksum="XXX"
+ reporter="arthur"
+ assignee="perceval"
+ author_login="[null]"
+ issue_attributes="JIRA=FOO-1234"
+ issue_creation_date="2013-04-16"
+ issue_update_date="2013-04-16"
+ issue_close_date="2013-04-16"
+ created_at="2013-04-16"
+ updated_at="2013-04-16"
+ />
+</dataset>
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/find_severities_by_component.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/find_severities_by_component.xml
new file mode 100644
index 00000000000..fbadd1cb359
--- /dev/null
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/find_severities_by_component.xml
@@ -0,0 +1,100 @@
+<!--
+ ~ SonarQube, open source software quality management tool.
+ ~ Copyright (C) 2008-2014 SonarSource
+ ~ mailto:contact AT sonarsource DOT com
+ ~
+ ~ SonarQube is free software; you can redistribute it and/or
+ ~ modify it under the terms of the GNU Lesser General Public
+ ~ License as published by the Free Software Foundation; either
+ ~ version 3 of the License, or (at your option) any later version.
+ ~
+ ~ SonarQube is distributed in the hope that it will be useful,
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ ~ Lesser General Public License for more details.
+ ~
+ ~ You should have received a copy of the GNU Lesser General Public License
+ ~ along with this program; if not, write to the Free Software Foundation,
+ ~ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ -->
+
+<dataset>
+
+ <!-- rule 500 -->
+ <issues
+ id="100"
+ kee="ABCDE-1"
+ component_id="401"
+ root_component_id="399"
+ rule_id="500"
+ severity="BLOCKER"
+ manual_severity="[false]"
+ message="[null]"
+ line="200"
+ effort_to_fix="4.2"
+ status="OPEN"
+ resolution="[null]"
+ checksum="XXX"
+ reporter="arthur"
+ assignee="perceval"
+ author_login="[null]"
+ issue_attributes="JIRA=FOO-1234"
+ issue_creation_date="2013-04-16"
+ issue_update_date="2013-04-16"
+ issue_close_date="2013-04-16"
+ created_at="2013-04-16"
+ updated_at="2013-04-16"
+ />
+
+ <issues
+ id="101"
+ kee="ABCDE-2"
+ component_id="401"
+ root_component_id="399"
+ rule_id="500"
+ severity="MAJOR"
+ manual_severity="[false]"
+ message="[null]"
+ line="200"
+ effort_to_fix="4.2"
+ status="OPEN"
+ resolution="[null]"
+ checksum="XXX"
+ reporter="arthur"
+ assignee="perceval"
+ author_login="[null]"
+ issue_attributes="JIRA=FOO-1234"
+ issue_creation_date="2013-04-16"
+ issue_update_date="2013-04-16"
+ issue_close_date="2013-04-16"
+ created_at="2013-04-16"
+ updated_at="2013-04-16"
+ />
+
+
+ <!-- rule 501 -->
+ <issues
+ id="102"
+ kee="ABCDE-3"
+ component_id="401"
+ root_component_id="399"
+ rule_id="501"
+ severity="BLOCKER"
+ manual_severity="[false]"
+ message="[null]"
+ line="200"
+ effort_to_fix="4.2"
+ status="OPEN"
+ resolution="[null]"
+ checksum="XXX"
+ reporter="arthur"
+ assignee="perceval"
+ author_login="[null]"
+ issue_attributes="JIRA=FOO-1234"
+ issue_creation_date="2013-04-16"
+ issue_update_date="2013-04-16"
+ issue_close_date="2013-04-16"
+ created_at="2013-04-16"
+ updated_at="2013-04-16"
+ />
+</dataset>
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/shared.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/shared.xml
index 1a7ef5f4246..fe24d237d6b 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/shared.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/shared.xml
@@ -12,7 +12,7 @@
<snapshots id="102" project_id="401" root_snapshot_id="100" parent_snapshot_id="101" root_project_id="399" path="100.101." islast="[true]" />
<snapshots id="103" project_id="402" root_snapshot_id="100" parent_snapshot_id="101" root_project_id="399" path="100.101." islast="[true]" />
- <rules tags="[null]" system_tags="[null]" id="500" plugin_rule_key="AvoidCycle" plugin_name="squid" language="java" />
- <rules tags="[null]" system_tags="[null]" id="501" plugin_rule_key="NullRef" plugin_name="squid" language="xoo" />
+ <rules id="500" tags="[null]" system_tags="[null]" plugin_rule_key="AvoidCycle" plugin_name="squid" language="java" />
+ <rules id="501" tags="[null]" system_tags="[null]" plugin_rule_key="NullRef" plugin_name="squid" language="xoo" />
</dataset>