aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-db
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2015-09-04 09:38:13 +0200
committerJulien Lancelot <julien.lancelot@sonarsource.com>2015-09-07 17:56:17 +0200
commitc6706c9934cda2a48007c9f3fd6d3e9abe9365e2 (patch)
treecfb0a740f1918d153478439b26fdad858db101cb /sonar-db
parentd6b98c8df426ee430eb6397c550b04f0ac5ba96d (diff)
downloadsonarqube-c6706c9934cda2a48007c9f3fd6d3e9abe9365e2.tar.gz
sonarqube-c6706c9934cda2a48007c9f3fd6d3e9abe9365e2.zip
SONAR-6827 fix selectBySnapshotAndMetricKeys
it should also return rule/characteristic measures
Diffstat (limited to 'sonar-db')
-rw-r--r--sonar-db/src/main/java/org/sonar/db/measure/MeasureDto.java1
-rw-r--r--sonar-db/src/main/resources/org/sonar/db/measure/MeasureMapper.xml4
-rw-r--r--sonar-db/src/test/java/org/sonar/db/measure/MeasureDaoTest.java63
-rw-r--r--sonar-db/src/test/resources/org/sonar/db/measure/MeasureDaoTest/select_by_snapshot_and_metric_keys.xml21
-rw-r--r--sonar-db/src/test/resources/org/sonar/db/measure/MeasureDaoTest/select_by_snapshot_and_metric_keys_with_characteristic_id.xml17
-rw-r--r--sonar-db/src/test/resources/org/sonar/db/measure/MeasureDaoTest/select_by_snapshot_and_metric_keys_with_rule_id.xml17
6 files changed, 120 insertions, 3 deletions
diff --git a/sonar-db/src/main/java/org/sonar/db/measure/MeasureDto.java b/sonar-db/src/main/java/org/sonar/db/measure/MeasureDto.java
index 986f5d6d588..ccfaf99c4cb 100644
--- a/sonar-db/src/main/java/org/sonar/db/measure/MeasureDto.java
+++ b/sonar-db/src/main/java/org/sonar/db/measure/MeasureDto.java
@@ -202,6 +202,7 @@ public class MeasureDto {
return this;
}
+ @CheckForNull
public Integer getCharacteristicId() {
return characteristicId;
}
diff --git a/sonar-db/src/main/resources/org/sonar/db/measure/MeasureMapper.xml b/sonar-db/src/main/resources/org/sonar/db/measure/MeasureMapper.xml
index d2439310131..b4449505645 100644
--- a/sonar-db/src/main/resources/org/sonar/db/measure/MeasureMapper.xml
+++ b/sonar-db/src/main/resources/org/sonar/db/measure/MeasureMapper.xml
@@ -5,6 +5,8 @@
<sql id="measureColumns">
pm.id,
pm.metric_id as metricId,
+ pm.rule_id as ruleId,
+ pm.characteristic_id as characteristicId,
pm.snapshot_id as snapshotId,
pm.value as value,
pm.text_value as textValue,
@@ -69,8 +71,6 @@
<foreach item="metricKey" index="index" collection="metricKeys" open="(" separator=" or " close=")">
metric.name=#{metricKey}
</foreach>
- AND pm.rule_id IS NULL
- AND pm.characteristic_id IS NULL
AND pm.person_id IS NULL
</where>
</select>
diff --git a/sonar-db/src/test/java/org/sonar/db/measure/MeasureDaoTest.java b/sonar-db/src/test/java/org/sonar/db/measure/MeasureDaoTest.java
index 8f487d8fc56..dc24bb8a022 100644
--- a/sonar-db/src/test/java/org/sonar/db/measure/MeasureDaoTest.java
+++ b/sonar-db/src/test/java/org/sonar/db/measure/MeasureDaoTest.java
@@ -25,6 +25,7 @@ import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableSet;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
@@ -36,6 +37,7 @@ import org.sonar.db.DbTester;
import org.sonar.test.DbTests;
import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Sets.newHashSet;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.guava.api.Assertions.assertThat;
@@ -268,6 +270,55 @@ public class MeasureDaoTest {
}
@Test
+ public void select_by_snapshot_and_metric_keys() throws Exception {
+ db.prepareDbUnit(getClass(), "select_by_snapshot_and_metric_keys.xml");
+
+ List<MeasureDto> results = underTest.selectBySnapshotIdAndMetricKeys(5, newHashSet("ncloc", "authors_by_line"), db.getSession());
+ assertThat(results).hasSize(2);
+
+ results = underTest.selectBySnapshotIdAndMetricKeys(5, newHashSet("ncloc"), db.getSession());
+ assertThat(results).hasSize(1);
+
+ MeasureDto result = results.get(0);
+ assertThat(result.getId()).isEqualTo(22);
+ assertThat(result.getValue()).isEqualTo(10d);
+ assertThat(result.getVariation(1)).isEqualTo(1d);
+ assertThat(result.getVariation(2)).isEqualTo(2d);
+ assertThat(result.getVariation(3)).isEqualTo(3d);
+ assertThat(result.getVariation(4)).isEqualTo(4d);
+ assertThat(result.getVariation(5)).isEqualTo(-5d);
+
+ assertThat(underTest.selectBySnapshotIdAndMetricKeys(123, newHashSet("ncloc"), db.getSession())).isEmpty();
+ assertThat(underTest.selectBySnapshotIdAndMetricKeys(5, Collections.<String>emptySet(), db.getSession())).isEmpty();
+ }
+
+ @Test
+ public void select_by_snapshot_and_metric_keys_return_measures_with_rule_id() throws Exception {
+ db.prepareDbUnit(getClass(), "select_by_snapshot_and_metric_keys_with_rule_id.xml");
+
+ List<MeasureDto> results = underTest.selectBySnapshotIdAndMetricKeys(5, newHashSet("ncloc"), db.getSession());
+ assertThat(results).hasSize(3);
+
+ Map<Long, MeasureDto> measuresById = measuresById(results);
+ assertThat(measuresById.get(1L).getRuleId()).isNull();
+ assertThat(measuresById.get(2L).getRuleId()).isEqualTo(30);
+ assertThat(measuresById.get(3L).getRuleId()).isEqualTo(31);
+ }
+
+ @Test
+ public void select_by_snapshot_and_metric_keys_return_measures_with_characteristic_id() throws Exception {
+ db.prepareDbUnit(getClass(), "select_by_snapshot_and_metric_keys_with_characteristic_id.xml");
+
+ List<MeasureDto> results = underTest.selectBySnapshotIdAndMetricKeys(5, newHashSet("ncloc"), db.getSession());
+ assertThat(results).hasSize(3);
+
+ Map<Long, MeasureDto> measuresById = measuresById(results);
+ assertThat(measuresById.get(1L).getCharacteristicId()).isNull();
+ assertThat(measuresById.get(2L).getCharacteristicId()).isEqualTo(10);
+ assertThat(measuresById.get(3L).getCharacteristicId()).isEqualTo(11);
+ }
+
+ @Test
public void insert() {
db.prepareDbUnit(getClass(), "empty.xml");
@@ -291,7 +342,7 @@ public class MeasureDaoTest {
);
db.getSession().commit();
- db.assertDbUnit(getClass(), "insert-result.xml", new String[] {"id"}, "project_measures");
+ db.assertDbUnit(getClass(), "insert-result.xml", new String[]{"id"}, "project_measures");
}
@Test
@@ -323,4 +374,14 @@ public class MeasureDaoTest {
}
});
}
+
+ private static Map<Long, MeasureDto> measuresById(List<MeasureDto> pastMeasures) {
+ return FluentIterable.from(pastMeasures).uniqueIndex(new Function<MeasureDto, Long>() {
+ @Nullable
+ @Override
+ public Long apply(MeasureDto input) {
+ return input.getId();
+ }
+ });
+ }
}
diff --git a/sonar-db/src/test/resources/org/sonar/db/measure/MeasureDaoTest/select_by_snapshot_and_metric_keys.xml b/sonar-db/src/test/resources/org/sonar/db/measure/MeasureDaoTest/select_by_snapshot_and_metric_keys.xml
new file mode 100644
index 00000000000..c27311c8d38
--- /dev/null
+++ b/sonar-db/src/test/resources/org/sonar/db/measure/MeasureDaoTest/select_by_snapshot_and_metric_keys.xml
@@ -0,0 +1,21 @@
+<dataset>
+
+ <metrics id="10" name="authors_by_line"/>
+ <metrics id="11" name="coverage_line_hits_data"/>
+ <metrics id="12" name="ncloc"/>
+
+ <projects id="1" kee="org.struts:struts-core:src/org/struts/RequestContext.java" enabled="[true]"/>
+
+ <snapshots id="5" project_id="1" islast="[true]" />
+
+ <project_measures id="20" snapshot_id="5" metric_id="10" value="[null]" text_value="0123456789012345678901234567890123456789" measure_data="[null]"
+ variation_value_1="[null]" variation_value_2="[null]" variation_value_3="[null]" variation_value_4="[null]" variation_value_5="[null]"
+ alert_status="[null]" alert_text="[null]" />
+ <project_measures id="21" snapshot_id="5" metric_id="11" value="[null]" text_value="36=1;37=1;38=1;39=1;43=1;48=1;53=1" measure_data="[null]"
+ variation_value_1="[null]" variation_value_2="[null]" variation_value_3="[null]" variation_value_4="[null]" variation_value_5="[null]"
+ alert_status="[null]" alert_text="[null]" />
+ <project_measures id="22" snapshot_id="5" metric_id="12" value="10" text_value="[null]" measure_data="[null]"
+ variation_value_1="1" variation_value_2="2" variation_value_3="3" variation_value_4="4" variation_value_5="-5"
+ alert_status="OK" alert_text="Green"/>
+
+</dataset>
diff --git a/sonar-db/src/test/resources/org/sonar/db/measure/MeasureDaoTest/select_by_snapshot_and_metric_keys_with_characteristic_id.xml b/sonar-db/src/test/resources/org/sonar/db/measure/MeasureDaoTest/select_by_snapshot_and_metric_keys_with_characteristic_id.xml
new file mode 100644
index 00000000000..8f451b78d8b
--- /dev/null
+++ b/sonar-db/src/test/resources/org/sonar/db/measure/MeasureDaoTest/select_by_snapshot_and_metric_keys_with_characteristic_id.xml
@@ -0,0 +1,17 @@
+<dataset>
+
+ <metrics id="10" name="authors_by_line"/>
+ <metrics id="11" name="coverage_line_hits_data"/>
+ <metrics id="12" name="ncloc"/>
+
+ <projects id="1" kee="org.struts:struts-core:src/org/struts/RequestContext.java" enabled="[true]"/>
+
+ <snapshots id="5" project_id="1" islast="[true]" />
+
+ <project_measures id="1" VALUE="60" METRIC_ID="12" SNAPSHOT_ID="5" RULE_ID="[null]" characteristic_id="[null]" person_id="[null]"/>
+
+ <project_measures id="2" VALUE="20" METRIC_ID="12" SNAPSHOT_ID="5" RULE_ID="[null]" characteristic_id="10" person_id="[null]"/>
+
+ <project_measures id="3" VALUE="40" METRIC_ID="12" SNAPSHOT_ID="5" RULE_ID="[null]" characteristic_id="11" person_id="[null]"/>
+
+</dataset>
diff --git a/sonar-db/src/test/resources/org/sonar/db/measure/MeasureDaoTest/select_by_snapshot_and_metric_keys_with_rule_id.xml b/sonar-db/src/test/resources/org/sonar/db/measure/MeasureDaoTest/select_by_snapshot_and_metric_keys_with_rule_id.xml
new file mode 100644
index 00000000000..1398c2447f8
--- /dev/null
+++ b/sonar-db/src/test/resources/org/sonar/db/measure/MeasureDaoTest/select_by_snapshot_and_metric_keys_with_rule_id.xml
@@ -0,0 +1,17 @@
+<dataset>
+
+ <metrics id="10" name="authors_by_line"/>
+ <metrics id="11" name="coverage_line_hits_data"/>
+ <metrics id="12" name="ncloc"/>
+
+ <projects id="1" kee="org.struts:struts-core:src/org/struts/RequestContext.java" enabled="[true]"/>
+
+ <snapshots id="5" project_id="1" islast="[true]" />
+
+ <project_measures id="1" VALUE="60" METRIC_ID="12" SNAPSHOT_ID="5" RULE_ID="[null]" characteristic_id="[null]" person_id="[null]"/>
+
+ <project_measures id="2" VALUE="20" METRIC_ID="12" SNAPSHOT_ID="5" RULE_ID="30" characteristic_id="[null]" person_id="[null]"/>
+
+ <project_measures id="3" VALUE="40" METRIC_ID="12" SNAPSHOT_ID="5" RULE_ID="31" characteristic_id="[null]" person_id="[null]"/>
+
+</dataset>