diff options
author | Jacek <jacek.poreda@sonarsource.com> | 2020-03-26 17:07:19 +0100 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2020-04-15 20:03:38 +0000 |
commit | bd73de80860fda06408f7c342ba7455250b16151 (patch) | |
tree | 59eea7785a4847404f5bbb649a4db165f9bf2b81 /server/sonar-db-dao | |
parent | 32c274e7d74a040b2895c613724fb89e0fc704cf (diff) | |
download | sonarqube-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')
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, |