From 8070dafc93d03545686ed19659c25ac902f518e6 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Wed, 21 May 2014 12:08:23 +0200 Subject: [PATCH] Fix query to check that project exists in Gality Gate --- .../core/component/db/ComponentMapper.java | 6 +-- .../sonar/core/measure/db/MeasureMapper.java | 2 +- .../core/component/db/ComponentMapper.xml | 48 +++---------------- .../sonar/core/measure/db/MeasureMapper.xml | 2 +- .../component/persistence/ComponentDao.java | 7 +-- .../measure/persistence/MeasureDao.java | 4 +- .../server/qualitygate/QualityGates.java | 4 +- .../sonar/server/source/SourceService.java | 2 +- .../persistence/ComponentDaoTest.java | 13 ++--- .../measure/persistence/MeasureDaoTest.java | 6 +-- .../server/qualitygate/QualityGatesTest.java | 14 ++---- .../server/source/SourceServiceTest.java | 2 +- 12 files changed, 28 insertions(+), 82 deletions(-) diff --git a/sonar-core/src/main/java/org/sonar/core/component/db/ComponentMapper.java b/sonar-core/src/main/java/org/sonar/core/component/db/ComponentMapper.java index a12a7fdf59b..b5b781c06be 100644 --- a/sonar-core/src/main/java/org/sonar/core/component/db/ComponentMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/component/db/ComponentMapper.java @@ -19,11 +19,7 @@ */ package org.sonar.core.component.db; -import org.apache.ibatis.annotations.Param; import org.sonar.core.component.ComponentDto; -import org.sonar.core.component.ComponentQuery; - -import java.util.Collection; /** * @since 4.3 @@ -34,5 +30,5 @@ public interface ComponentMapper { ComponentDto selectById(Long id); - Collection selectComponents(@Param("query") ComponentQuery query); + long countById(Long id); } diff --git a/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureMapper.java b/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureMapper.java index 4fcb4ac938d..6752fe6f6b3 100644 --- a/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/measure/db/MeasureMapper.java @@ -30,6 +30,6 @@ public interface MeasureMapper { List selectByComponentAndMetrics(@Param("componentKey") String componentKey, @Param("metricKeys") List metricKeys); - long count(@Param("key") MeasureKey key); + long countByKey(@Param("key") MeasureKey key); } diff --git a/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml b/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml index 83f07befbca..27ab64ac750 100644 --- a/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml @@ -13,31 +13,6 @@ p.path as path - - , - - - p.severity as severity - - - p.status as status - - - p.assignee as assignee - - - p.issue_creation_date as issueCreationDate - - - p.issue_update_date as issueUpdateDate - - - p.issue_close_date as issueCloseDate - - - - - - - - + diff --git a/sonar-core/src/main/resources/org/sonar/core/measure/db/MeasureMapper.xml b/sonar-core/src/main/resources/org/sonar/core/measure/db/MeasureMapper.xml index d1adf669fdc..48d066cade0 100644 --- a/sonar-core/src/main/resources/org/sonar/core/measure/db/MeasureMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/measure/db/MeasureMapper.xml @@ -45,7 +45,7 @@ - SELECT count(pm.id) FROM project_measures pm INNER JOIN snapshots s ON s.id=pm.snapshot_id AND s.islast=${_true} diff --git a/sonar-server/src/main/java/org/sonar/server/component/persistence/ComponentDao.java b/sonar-server/src/main/java/org/sonar/server/component/persistence/ComponentDao.java index c8e7dd68aa1..8c77f4a440a 100644 --- a/sonar-server/src/main/java/org/sonar/server/component/persistence/ComponentDao.java +++ b/sonar-server/src/main/java/org/sonar/server/component/persistence/ComponentDao.java @@ -25,13 +25,10 @@ import org.sonar.api.DaoComponent; import org.sonar.api.ServerComponent; import org.sonar.api.utils.System2; import org.sonar.core.component.ComponentDto; -import org.sonar.core.component.ComponentQuery; import org.sonar.core.component.db.ComponentMapper; import org.sonar.core.persistence.DbSession; import org.sonar.server.db.BaseDao; -import java.util.Collection; - /** * @since 4.3 */ @@ -50,8 +47,8 @@ public class ComponentDao extends BaseDao return getMapper(session).selectById(id); } - public Collection findByQuery(ComponentQuery query, SqlSession session) { - return getMapper(session).selectComponents(query); + public boolean existsById(Long id, SqlSession session) { + return getMapper(session).countById(id) > 0; } private ComponentMapper getMapper(SqlSession session) { diff --git a/sonar-server/src/main/java/org/sonar/server/measure/persistence/MeasureDao.java b/sonar-server/src/main/java/org/sonar/server/measure/persistence/MeasureDao.java index 8446ba71cb5..5bf5fc6b94b 100644 --- a/sonar-server/src/main/java/org/sonar/server/measure/persistence/MeasureDao.java +++ b/sonar-server/src/main/java/org/sonar/server/measure/persistence/MeasureDao.java @@ -52,8 +52,8 @@ public class MeasureDao extends BaseDao i return session.getMapper(MeasureMapper.class).selectByKey(key); } - public boolean exists(MeasureKey key, DbSession session) { - return session.getMapper(MeasureMapper.class).count(key) > 0; + public boolean existsByKey(MeasureKey key, DbSession session) { + return session.getMapper(MeasureMapper.class).countByKey(key) > 0; } public List findByComponentKeyAndMetricKeys(String componentKey, List metricKeys, DbSession session){ diff --git a/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGates.java b/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGates.java index df024027c0d..7117afc7a0b 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGates.java +++ b/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGates.java @@ -29,8 +29,6 @@ import org.sonar.api.measures.CoreMetrics; import org.sonar.api.measures.Metric; import org.sonar.api.measures.Metric.ValueType; import org.sonar.api.measures.MetricFinder; -import org.sonar.api.resources.Qualifiers; -import org.sonar.core.component.ComponentQuery; import org.sonar.core.permission.GlobalPermissions; import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.MyBatis; @@ -351,7 +349,7 @@ public class QualityGates { } private void checkNonNullProject(long projectId, DbSession session) { - if (componentDao.findByQuery(ComponentQuery.create().addIds(projectId).addQualifiers(Qualifiers.PROJECT), session).isEmpty()) { + if (!componentDao.existsById(projectId, session)) { throw new NotFoundException("There is no project with id=" + projectId); } } diff --git a/sonar-server/src/main/java/org/sonar/server/source/SourceService.java b/sonar-server/src/main/java/org/sonar/server/source/SourceService.java index d2c09186e06..4c975f3c0c8 100644 --- a/sonar-server/src/main/java/org/sonar/server/source/SourceService.java +++ b/sonar-server/src/main/java/org/sonar/server/source/SourceService.java @@ -83,7 +83,7 @@ public class SourceService implements ServerComponent { } public boolean hasScmData(String fileKey, DbSession session) { - return measureDao.exists(MeasureKey.of(fileKey, CoreMetrics.SCM_AUTHORS_BY_LINE_KEY), session); + return measureDao.existsByKey(MeasureKey.of(fileKey, CoreMetrics.SCM_AUTHORS_BY_LINE_KEY), session); } public boolean hasScmData(String fileKey) { diff --git a/sonar-server/src/test/java/org/sonar/server/component/persistence/ComponentDaoTest.java b/sonar-server/src/test/java/org/sonar/server/component/persistence/ComponentDaoTest.java index 6f72494cb4e..11e24174267 100644 --- a/sonar-server/src/test/java/org/sonar/server/component/persistence/ComponentDaoTest.java +++ b/sonar-server/src/test/java/org/sonar/server/component/persistence/ComponentDaoTest.java @@ -22,9 +22,7 @@ package org.sonar.server.component.persistence; import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.sonar.api.resources.Qualifiers; import org.sonar.core.component.ComponentDto; -import org.sonar.core.component.ComponentQuery; import org.sonar.core.persistence.AbstractDaoTestCase; import org.sonar.core.persistence.DbSession; @@ -88,13 +86,10 @@ public class ComponentDaoTest extends AbstractDaoTestCase { } @Test - public void find_by_query() { + public void count_by_id() { setupData("shared"); - assertThat(dao.findByQuery(ComponentQuery.create(), session)).hasSize(4); - assertThat(dao.findByQuery(ComponentQuery.create().addIds(1L), session)).hasSize(1); - assertThat(dao.findByQuery(ComponentQuery.create().addQualifiers(Qualifiers.PROJECT), session)).hasSize(1); - assertThat(dao.findByQuery(ComponentQuery.create().addQualifiers(Qualifiers.PROJECT, Qualifiers.MODULE), session)).hasSize(2); - assertThat(dao.findByQuery(ComponentQuery.create().addIds(1L).addQualifiers(Qualifiers.PROJECT), session)).hasSize(1); - assertThat(dao.findByQuery(ComponentQuery.create().addIds(1L).addQualifiers(Qualifiers.MODULE), session)).hasSize(0); + + assertThat(dao.existsById(4L, session)).isTrue(); + assertThat(dao.existsById(111L, session)).isFalse(); } } diff --git a/sonar-server/src/test/java/org/sonar/server/measure/persistence/MeasureDaoTest.java b/sonar-server/src/test/java/org/sonar/server/measure/persistence/MeasureDaoTest.java index f3ac394599f..b46d4d3275a 100644 --- a/sonar-server/src/test/java/org/sonar/server/measure/persistence/MeasureDaoTest.java +++ b/sonar-server/src/test/java/org/sonar/server/measure/persistence/MeasureDaoTest.java @@ -95,10 +95,10 @@ public class MeasureDaoTest extends AbstractDaoTestCase { } @Test - public void exists() throws Exception { + public void exists_by_key() throws Exception { setupData("shared"); - assertThat(dao.exists(MeasureKey.of("org.struts:struts-core:src/org/struts/RequestContext.java", "ncloc"), session)).isTrue(); - assertThat(dao.exists(MeasureKey.of("org.struts:struts-core:src/org/struts/RequestContext.java", "unknown"), session)).isFalse(); + assertThat(dao.existsByKey(MeasureKey.of("org.struts:struts-core:src/org/struts/RequestContext.java", "ncloc"), session)).isTrue(); + assertThat(dao.existsByKey(MeasureKey.of("org.struts:struts-core:src/org/struts/RequestContext.java", "unknown"), session)).isFalse(); } } diff --git a/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGatesTest.java b/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGatesTest.java index 3edbd0477c7..77a2bda3a35 100644 --- a/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGatesTest.java +++ b/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGatesTest.java @@ -34,8 +34,6 @@ import org.sonar.api.measures.CoreMetrics; import org.sonar.api.measures.Metric; import org.sonar.api.measures.Metric.ValueType; import org.sonar.api.measures.MetricFinder; -import org.sonar.core.component.ComponentDto; -import org.sonar.core.component.ComponentQuery; import org.sonar.core.permission.GlobalPermissions; import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.MyBatis; @@ -493,10 +491,9 @@ public class QualityGatesTest { Long qGateId = 42L; Long projectId = 24L; when(dao.selectById(qGateId)).thenReturn(new QualityGateDto().setId(qGateId)); - when(componentDao.findByQuery(any(ComponentQuery.class), eq(session))).thenReturn(ImmutableList.of(new ComponentDto().setId(projectId))); - qGates.associateProject(qGateId , projectId); + when(componentDao.existsById(projectId, session)).thenReturn(true); + qGates.associateProject(qGateId, projectId); verify(dao).selectById(qGateId); - verify(componentDao).findByQuery(any(ComponentQuery.class), eq(session)); ArgumentCaptor propertyCaptor = ArgumentCaptor.forClass(PropertyDto.class); verify(propertiesDao).setProperty(propertyCaptor.capture()); PropertyDto property = propertyCaptor.getValue(); @@ -506,7 +503,7 @@ public class QualityGatesTest { } @Test(expected = NotFoundException.class) - public void should_fail_associate_project_on_unexisting_project() { + public void should_fail_associate_project_on_not_existing_project() { Long qGateId = 42L; Long projectId = 24L; when(dao.selectById(qGateId)).thenReturn(new QualityGateDto().setId(qGateId)); @@ -518,10 +515,9 @@ public class QualityGatesTest { Long qGateId = 42L; Long projectId = 24L; when(dao.selectById(qGateId)).thenReturn(new QualityGateDto().setId(qGateId)); - when(componentDao.findByQuery(any(ComponentQuery.class), eq(session))).thenReturn(ImmutableList.of(new ComponentDto().setId(projectId))); - qGates.dissociateProject(qGateId , projectId); + when(componentDao.existsById(projectId, session)).thenReturn(true); + qGates.dissociateProject(qGateId, projectId); verify(dao).selectById(qGateId); - verify(componentDao).findByQuery(any(ComponentQuery.class), eq(session)); verify(propertiesDao).deleteProjectProperty("sonar.qualitygate", projectId); } diff --git a/sonar-server/src/test/java/org/sonar/server/source/SourceServiceTest.java b/sonar-server/src/test/java/org/sonar/server/source/SourceServiceTest.java index 2370356e815..0321ebc0524 100644 --- a/sonar-server/src/test/java/org/sonar/server/source/SourceServiceTest.java +++ b/sonar-server/src/test/java/org/sonar/server/source/SourceServiceTest.java @@ -139,7 +139,7 @@ public class SourceServiceTest { public void has_scm_data() throws Exception { MockUserSession.set().addComponentPermission(UserRole.CODEVIEWER, PROJECT_KEY, COMPONENT_KEY); - when(measureDao.exists(any(MeasureKey.class), eq(session))).thenReturn(true); + when(measureDao.existsByKey(any(MeasureKey.class), eq(session))).thenReturn(true); assertThat(service.hasScmData(COMPONENT_KEY)).isTrue(); } } -- 2.39.5