aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao
diff options
context:
space:
mode:
authorJacek <jacek.poreda@sonarsource.com>2020-03-26 17:07:19 +0100
committersonartech <sonartech@sonarsource.com>2020-04-15 20:03:38 +0000
commitbd73de80860fda06408f7c342ba7455250b16151 (patch)
tree59eea7785a4847404f5bbb649a4db165f9bf2b81 /server/sonar-db-dao
parent32c274e7d74a040b2895c613724fb89e0fc704cf (diff)
downloadsonarqube-bd73de80860fda06408f7c342ba7455250b16151.tar.gz
sonarqube-bd73de80860fda06408f7c342ba7455250b16151.zip
SONAR-13188 store qualifier in project measure index
- return applications in api/components/search_projects
Diffstat (limited to 'server/sonar-db-dao')
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/measure/ProjectMeasuresIndexerIterator.java18
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/measure/ProjectMeasuresIndexerIteratorTest.java30
2 files changed, 38 insertions, 10 deletions
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/measure/ProjectMeasuresIndexerIterator.java b/server/sonar-db-dao/src/main/java/org/sonar/db/measure/ProjectMeasuresIndexerIterator.java
index af5254ebe41..18daceed44b 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/measure/ProjectMeasuresIndexerIterator.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/measure/ProjectMeasuresIndexerIterator.java
@@ -72,10 +72,10 @@ public class ProjectMeasuresIndexerIterator extends CloseableIterator<ProjectMea
CoreMetrics.NEW_LINES_KEY,
CoreMetrics.NEW_RELIABILITY_RATING_KEY);
- private static final String SQL_PROJECTS = "SELECT p.organization_uuid, p.uuid, p.kee, p.name, s.created_at, p.tags " +
+ private static final String SQL_PROJECTS = "SELECT p.organization_uuid, p.uuid, p.kee, p.name, s.created_at, p.tags, p.qualifier " +
"FROM projects p " +
"LEFT OUTER JOIN snapshots s ON s.component_uuid=p.uuid AND s.islast=? " +
- "WHERE p.qualifier=?";
+ "WHERE p.qualifier in (?, ?)";
private static final String PROJECT_FILTER = " AND p.uuid=?";
@@ -116,7 +116,8 @@ public class ProjectMeasuresIndexerIterator extends CloseableIterator<ProjectMea
String name = rs.getString(4);
Long analysisDate = DatabaseUtils.getLong(rs, 5);
List<String> tags = readDbTags(DatabaseUtils.getString(rs, 6));
- Project project = new Project(orgUuid, uuid, key, name, tags, analysisDate);
+ String qualifier = rs.getString(7);
+ Project project = new Project(orgUuid, uuid, key, name, qualifier, tags, analysisDate);
projects.add(project);
}
return projects;
@@ -134,8 +135,9 @@ public class ProjectMeasuresIndexerIterator extends CloseableIterator<ProjectMea
PreparedStatement stmt = session.getConnection().prepareStatement(sql.toString());
stmt.setBoolean(1, true);
stmt.setString(2, Qualifiers.PROJECT);
+ stmt.setString(3, Qualifiers.APP);
if (projectUuid != null) {
- stmt.setString(3, projectUuid);
+ stmt.setString(4, projectUuid);
}
return stmt;
} catch (SQLException e) {
@@ -230,14 +232,16 @@ public class ProjectMeasuresIndexerIterator extends CloseableIterator<ProjectMea
private final String uuid;
private final String key;
private final String name;
+ private final String qualifier;
private final Long analysisDate;
private final List<String> tags;
- public Project(String organizationUuid, String uuid, String key, String name, List<String> tags, @Nullable Long analysisDate) {
+ public Project(String organizationUuid, String uuid, String key, String name, String qualifier, List<String> tags, @Nullable Long analysisDate) {
this.organizationUuid = organizationUuid;
this.uuid = uuid;
this.key = key;
this.name = name;
+ this.qualifier = qualifier;
this.tags = tags;
this.analysisDate = analysisDate;
}
@@ -258,6 +262,10 @@ public class ProjectMeasuresIndexerIterator extends CloseableIterator<ProjectMea
return name;
}
+ public String getQualifier() {
+ return qualifier;
+ }
+
public List<String> getTags() {
return tags;
}
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/measure/ProjectMeasuresIndexerIteratorTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/measure/ProjectMeasuresIndexerIteratorTest.java
index 6549101fed6..1dbdd3aa301 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/measure/ProjectMeasuresIndexerIteratorTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/measure/ProjectMeasuresIndexerIteratorTest.java
@@ -22,7 +22,6 @@ package org.sonar.db.measure;
import com.google.common.collect.Maps;
import java.util.Map;
import javax.annotation.Nullable;
-import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@@ -31,12 +30,10 @@ import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
import org.sonar.db.component.ComponentDto;
-import org.sonar.db.component.ComponentTesting;
import org.sonar.db.component.SnapshotDto;
import org.sonar.db.measure.ProjectMeasuresIndexerIterator.ProjectMeasures;
import org.sonar.db.metric.MetricDto;
import org.sonar.db.organization.OrganizationDto;
-import org.sonar.db.project.ProjectDto;
import static com.google.common.collect.Lists.newArrayList;
import static org.assertj.core.api.Assertions.assertThat;
@@ -48,7 +45,6 @@ import static org.sonar.api.measures.Metric.ValueType.DISTRIB;
import static org.sonar.api.measures.Metric.ValueType.INT;
import static org.sonar.api.measures.Metric.ValueType.LEVEL;
import static org.sonar.api.measures.Metric.ValueType.STRING;
-import static org.sonar.db.component.ComponentTesting.newView;
import static org.sonar.db.component.SnapshotTesting.newAnalysis;
public class ProjectMeasuresIndexerIteratorTest {
@@ -67,7 +63,6 @@ public class ProjectMeasuresIndexerIteratorTest {
ComponentDto project = dbTester.components().insertPrivateProject(organization,
c -> c.setDbKey("Project-Key").setName("Project Name"),
p -> p.setTags(newArrayList("platform", "java")));
- ProjectDto projectDto = dbTester.components().getProjectDto(project);
SnapshotDto analysis = dbTester.components().insertSnapshot(project);
MetricDto metric1 = dbTester.measures().insertMetric(m -> m.setValueType(INT.name()).setKey("ncloc"));
@@ -83,12 +78,37 @@ public class ProjectMeasuresIndexerIteratorTest {
assertThat(doc.getProject().getUuid()).isEqualTo(project.uuid());
assertThat(doc.getProject().getKey()).isEqualTo("Project-Key");
assertThat(doc.getProject().getName()).isEqualTo("Project Name");
+ assertThat(doc.getProject().getQualifier()).isEqualTo("TRK");
assertThat(doc.getProject().getTags()).containsExactly("platform", "java");
assertThat(doc.getProject().getAnalysisDate()).isNotNull().isEqualTo(analysis.getCreatedAt());
assertThat(doc.getMeasures().getNumericMeasures()).containsOnly(entry(metric1.getKey(), 10d), entry(metric2.getKey(), 20d));
}
@Test
+ public void return_application_measure() {
+ OrganizationDto organization = dbTester.organizations().insert();
+ ComponentDto project = dbTester.components().insertPrivateApplication(organization,
+ c -> c.setDbKey("App-Key").setName("App Name"));
+
+ SnapshotDto analysis = dbTester.components().insertSnapshot(project);
+ MetricDto metric1 = dbTester.measures().insertMetric(m -> m.setValueType(INT.name()).setKey("ncloc"));
+ MetricDto metric2 = dbTester.measures().insertMetric(m -> m.setValueType(INT.name()).setKey("coverage"));
+ dbTester.measures().insertLiveMeasure(project, metric1, m -> m.setValue(10d));
+ dbTester.measures().insertLiveMeasure(project, metric2, m -> m.setValue(20d));
+
+ Map<String, ProjectMeasures> docsById = createResultSetAndReturnDocsById();
+
+ assertThat(docsById).hasSize(1);
+ ProjectMeasures doc = docsById.get(project.uuid());
+ assertThat(doc).isNotNull();
+ assertThat(doc.getProject().getUuid()).isEqualTo(project.uuid());
+ assertThat(doc.getProject().getKey()).isEqualTo("App-Key");
+ assertThat(doc.getProject().getName()).isEqualTo("App Name");
+ assertThat(doc.getProject().getAnalysisDate()).isNotNull().isEqualTo(analysis.getCreatedAt());
+ assertThat(doc.getMeasures().getNumericMeasures()).containsOnly(entry(metric1.getKey(), 10d), entry(metric2.getKey(), 20d));
+ }
+
+ @Test
public void return_project_measure_having_leak() {
OrganizationDto organization = dbTester.organizations().insert();
ComponentDto project = dbTester.components().insertPrivateProject(organization,