From 1737fa02b6e9fb52288e14696a1ecec1f52ad91b Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Mon, 7 Sep 2015 16:12:51 +0200 Subject: [PATCH] SONAR-6749 Add query to get custom measures from a metric key and a text value --- .../java/org/sonar/db/component/ComponentDao.java | 9 --------- .../org/sonar/db/component/ComponentMapper.java | 2 -- .../sonar/db/measure/custom/CustomMeasureDao.java | 7 +++++++ .../sonar/db/measure/custom/CustomMeasureDto.java | 7 ++++++- .../db/measure/custom/CustomMeasureMapper.java | 2 ++ .../org/sonar/db/component/ComponentMapper.xml | 12 ------------ .../db/measure/custom/CustomMeasureMapper.xml | 10 ++++++++++ .../db/measure/custom/CustomMeasureDaoTest.java | 11 +++++++++++ .../select_by_metric_key_and_text_value.xml | 14 ++++++++++++++ 9 files changed, 50 insertions(+), 24 deletions(-) create mode 100644 sonar-db/src/test/resources/org/sonar/db/measure/custom/CustomMeasureDaoTest/select_by_metric_key_and_text_value.xml diff --git a/sonar-db/src/main/java/org/sonar/db/component/ComponentDao.java b/sonar-db/src/main/java/org/sonar/db/component/ComponentDao.java index 4b753923e85..2973460b1b3 100644 --- a/sonar-db/src/main/java/org/sonar/db/component/ComponentDao.java +++ b/sonar-db/src/main/java/org/sonar/db/component/ComponentDao.java @@ -239,15 +239,6 @@ public class ComponentDao implements Dao { return mapper(dbSession).selectByProjectUuid(projectUuid); } - /** - * Retrieves all components with a specific customer measure, no other filtering is done by this method. - * - * Used by Views plugin - */ - public List selectByCustomMeasure(String metricKey, String metricValue, DbSession dbSession) { - return mapper(dbSession).selectByCustomMeasure(metricKey, metricValue); - } - private static void addPartialQueryParameterIfNotNull(Map parameters, @Nullable String keyOrNameFilter) { if (keyOrNameFilter != null) { parameters.put("query", "%" + keyOrNameFilter.toUpperCase() + "%"); diff --git a/sonar-db/src/main/java/org/sonar/db/component/ComponentMapper.java b/sonar-db/src/main/java/org/sonar/db/component/ComponentMapper.java index 1f405472d4f..4204f8ad370 100644 --- a/sonar-db/src/main/java/org/sonar/db/component/ComponentMapper.java +++ b/sonar-db/src/main/java/org/sonar/db/component/ComponentMapper.java @@ -55,8 +55,6 @@ public interface ComponentMapper { List selectByProjectUuid(@Param("projectUuid") String projectUuid); - List selectByCustomMeasure(@Param("metricKey") String metricKey, @Param("metricValue") String metricValue); - List selectExistingUuids(@Param("uuids") Collection uuids); /** diff --git a/sonar-db/src/main/java/org/sonar/db/measure/custom/CustomMeasureDao.java b/sonar-db/src/main/java/org/sonar/db/measure/custom/CustomMeasureDao.java index 3689413a78e..90a5cd2e3f8 100644 --- a/sonar-db/src/main/java/org/sonar/db/measure/custom/CustomMeasureDao.java +++ b/sonar-db/src/main/java/org/sonar/db/measure/custom/CustomMeasureDao.java @@ -84,6 +84,13 @@ public class CustomMeasureDao implements Dao { return mapper(session).selectByComponentUuid(componentUuid); } + /** + * Used by Views plugin + */ + public List selectByMetricKeyAndTextValue(DbSession session, String metricKey, String textValue) { + return mapper(session).selectByMetricKeyAndTextValue(metricKey, textValue); + } + private CustomMeasureMapper mapper(DbSession session) { return session.getMapper(CustomMeasureMapper.class); } diff --git a/sonar-db/src/main/java/org/sonar/db/measure/custom/CustomMeasureDto.java b/sonar-db/src/main/java/org/sonar/db/measure/custom/CustomMeasureDto.java index c17e0228fd9..8de62f8b721 100644 --- a/sonar-db/src/main/java/org/sonar/db/measure/custom/CustomMeasureDto.java +++ b/sonar-db/src/main/java/org/sonar/db/measure/custom/CustomMeasureDto.java @@ -20,7 +20,11 @@ package org.sonar.db.measure.custom; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; + public class CustomMeasureDto { + private long id; private int metricId; private String componentUuid; @@ -49,11 +53,12 @@ public class CustomMeasureDto { return this; } + @CheckForNull public String getTextValue() { return textValue; } - public CustomMeasureDto setTextValue(String textValue) { + public CustomMeasureDto setTextValue(@Nullable String textValue) { this.textValue = textValue; return this; } diff --git a/sonar-db/src/main/java/org/sonar/db/measure/custom/CustomMeasureMapper.java b/sonar-db/src/main/java/org/sonar/db/measure/custom/CustomMeasureMapper.java index cb029d6f7c8..d69733bcfe5 100644 --- a/sonar-db/src/main/java/org/sonar/db/measure/custom/CustomMeasureMapper.java +++ b/sonar-db/src/main/java/org/sonar/db/measure/custom/CustomMeasureMapper.java @@ -41,6 +41,8 @@ public interface CustomMeasureMapper { List selectByComponentUuid(String s, RowBounds rowBounds); + List selectByMetricKeyAndTextValue(@Param("metricKey") String metricKey, @Param("textValue") String textValue); + int countByComponentUuid(String componentUuid); int countByComponentIdAndMetricId(@Param("componentUuid") String componentUuid, @Param("metricId") int metricId); diff --git a/sonar-db/src/main/resources/org/sonar/db/component/ComponentMapper.xml b/sonar-db/src/main/resources/org/sonar/db/component/ComponentMapper.xml index 86861586b7d..a3c2a787c13 100644 --- a/sonar-db/src/main/resources/org/sonar/db/component/ComponentMapper.xml +++ b/sonar-db/src/main/resources/org/sonar/db/component/ComponentMapper.xml @@ -79,18 +79,6 @@ - - + + INSERT INTO manual_measures ( metric_id, component_uuid, value, text_value, user_login, description, created_at, updated_at diff --git a/sonar-db/src/test/java/org/sonar/db/measure/custom/CustomMeasureDaoTest.java b/sonar-db/src/test/java/org/sonar/db/measure/custom/CustomMeasureDaoTest.java index 6090ddcf783..aaa68ff7347 100644 --- a/sonar-db/src/test/java/org/sonar/db/measure/custom/CustomMeasureDaoTest.java +++ b/sonar-db/src/test/java/org/sonar/db/measure/custom/CustomMeasureDaoTest.java @@ -157,4 +157,15 @@ public class CustomMeasureDaoTest { underTest.selectOrFail(session, 42L); } + @Test + public void select_by_metric_key_and_text_value() throws Exception { + db.prepareDbUnit(getClass(), "select_by_metric_key_and_text_value.xml"); + + List result = underTest.selectByMetricKeyAndTextValue(session, "customKey", "value1"); + + assertThat(result).extracting("id").containsOnly(20L, 21L); + + assertThat(underTest.selectByMetricKeyAndTextValue(session, "customKey", "unknown")).isEmpty(); + assertThat(underTest.selectByMetricKeyAndTextValue(session, "unknown", "value1")).isEmpty(); + } } diff --git a/sonar-db/src/test/resources/org/sonar/db/measure/custom/CustomMeasureDaoTest/select_by_metric_key_and_text_value.xml b/sonar-db/src/test/resources/org/sonar/db/measure/custom/CustomMeasureDaoTest/select_by_metric_key_and_text_value.xml new file mode 100644 index 00000000000..ff00f759c69 --- /dev/null +++ b/sonar-db/src/test/resources/org/sonar/db/measure/custom/CustomMeasureDaoTest/select_by_metric_key_and_text_value.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + -- 2.39.5