diff options
author | Julien Lancelot <julien.lancelot@sonarsource.com> | 2014-05-19 17:15:49 +0200 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@sonarsource.com> | 2014-05-19 17:34:43 +0200 |
commit | 84c3361acbf85b6d5d02ddee7d353f5491fbbd7f (patch) | |
tree | 9a296336c03cdb131ffab2d782886f0f213020e4 /sonar-core | |
parent | aed2044771ab27fe29061d0c6924f2c892c28739 (diff) | |
download | sonarqube-84c3361acbf85b6d5d02ddee7d353f5491fbbd7f.tar.gz sonarqube-84c3361acbf85b6d5d02ddee7d353f5491fbbd7f.zip |
SONAR-5305 Return aggregation of rules and severities. Return snapshot date in periods
Diffstat (limited to 'sonar-core')
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> |