]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5531 - Fixed duplicate projects and components in result
authorStephane Gamard <stephane.gamard@sonarsource.com>
Fri, 5 Sep 2014 19:22:47 +0000 (21:22 +0200)
committerStephane Gamard <stephane.gamard@sonarsource.com>
Fri, 5 Sep 2014 19:22:47 +0000 (21:22 +0200)
server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java
server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java
server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueResult.java
server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java
sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml

index c8741331806769781ca2d2b4dfb3f133a61123ca..e8202496c58deec6f4323df6ee33a46bca6dd5a8 100644 (file)
@@ -351,10 +351,8 @@ public class IssueService implements ServerComponent {
     DbSession session = dbClient.openSession(false);
     try {
       for (Issue issue : result.getHits()) {
-        result.addProject(issue.key(),
-          dbClient.componentDao().getByKey(session, issue.projectKey()));
-        result.addComponent(issue.key(),
-          dbClient.componentDao().getByKey(session, issue.componentKey()));
+        result.addProject(dbClient.componentDao().getByKey(session, issue.projectKey()));
+        result.addComponent(dbClient.componentDao().getByKey(session, issue.componentKey()));
       }
     } finally {
       session.close();
index 0040c81b9735ea72dff043875b6a41eddfb25e6d..d3de841ef222911d2a85cfdbe20aa9ad088545a2 100644 (file)
@@ -178,15 +178,17 @@ public class IssueIndex extends BaseIndex<IssueDoc, IssueDto, String> {
       esSearch.setQuery(esQuery);
     }
 
-    // Execute Term aggregations
-    esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.SEVERITY.field())
-      .field(IssueNormalizer.IssueField.SEVERITY.field()));
-    esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.STATUS.field())
-      .field(IssueNormalizer.IssueField.STATUS.field()));
-    esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.RESOLUTION.field())
-      .field(IssueNormalizer.IssueField.RESOLUTION.field()));
-    esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.ACTION_PLAN.field())
-      .field(IssueNormalizer.IssueField.ACTION_PLAN.field()));
+    if (options.isFacet()) {
+      // Execute Term aggregations
+      esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.SEVERITY.field())
+        .field(IssueNormalizer.IssueField.SEVERITY.field()));
+      esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.STATUS.field())
+        .field(IssueNormalizer.IssueField.STATUS.field()));
+      esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.RESOLUTION.field())
+        .field(IssueNormalizer.IssueField.RESOLUTION.field()));
+      esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.ACTION_PLAN.field())
+        .field(IssueNormalizer.IssueField.ACTION_PLAN.field()));
+    }
 
     // Execute Function aggregation
     esSearch.addAggregation(AggregationBuilders.sum("totalDuration")
index ca80f82259361b9be871f06f1f67dc0ae3c8943e..5e2d254fc37c3851bec0d086351eeccfadee896a 100644 (file)
@@ -84,7 +84,7 @@ public class IssueResult extends Result<IssueDoc> implements IssueQueryResult {
 
   @Override
   public Component component(Issue issue) {
-    return components.get(issue.key());
+    return components.get(issue.componentKey());
   }
 
   @Override
@@ -94,7 +94,7 @@ public class IssueResult extends Result<IssueDoc> implements IssueQueryResult {
 
   @Override
   public Component project(Issue issue) {
-    return projects.get(issue.key());
+    return projects.get(issue.projectKey());
   }
 
   @Override
@@ -136,11 +136,11 @@ public class IssueResult extends Result<IssueDoc> implements IssueQueryResult {
     return false;
   }
 
-  public void addProject(String key, ComponentDto project) {
-    this.projects.put(key, project);
+  public void addProject(ComponentDto project) {
+    this.projects.put(project.key(), project);
   }
 
-  public void addComponent(String key, ComponentDto project) {
-    this.components.put(key, project);
+  public void addComponent(ComponentDto component) {
+    this.components.put(component.key(), component);
   }
 }
index a158e7eb1bf93e42ffc872ba986a9e9dd2019ee1..53361becc3c4bed1b5a963b7cc3e496aa206b528 100644 (file)
@@ -66,16 +66,19 @@ public class IssueServiceMediumTest {
     tester.get(RuleDao.class).insert(session, rule);
 
     project = new ComponentDto()
+      .setEnabled(true)
       .setId(1L)
       .setKey("MyProject")
       .setProjectId(1L);
     tester.get(ComponentDao.class).insert(session, project);
 
     resource = new ComponentDto()
+      .setEnabled(true)
       .setProjectId(1L)
       .setKey("MyComponent")
       .setId(2L);
     tester.get(ComponentDao.class).insert(session, resource);
+    session.commit();
   }
 
   @After
@@ -84,7 +87,7 @@ public class IssueServiceMediumTest {
   }
 
   @Test
-  public void has_facets() throws Exception {
+  public void can_facet() throws Exception {
     IssueDto issue1 = getIssue().setActionPlanKey("P1");
     IssueDto issue2 = getIssue().setActionPlanKey("P2");
     tester.get(IssueDao.class).insert(session, issue1, issue2);
@@ -92,10 +95,25 @@ public class IssueServiceMediumTest {
 
     IssueResult result = service.search(IssueQuery.builder().build(), new QueryOptions());
     assertThat(result.getHits()).hasSize(2);
+    assertThat(result.getFacets()).isEmpty();
+
+    result = service.search(IssueQuery.builder().build(), new QueryOptions().setFacet(true));
     assertThat(result.getFacets().keySet()).hasSize(4);
     assertThat(result.getFacetKeys("actionPlan")).hasSize(2);
   }
 
+  @Test
+  public void has_component_and_project() throws Exception {
+    IssueDto issue1 = getIssue().setActionPlanKey("P1");
+    IssueDto issue2 = getIssue().setActionPlanKey("P2");
+    tester.get(IssueDao.class).insert(session, issue1, issue2);
+    session.commit();
+
+    IssueResult result = service.search(IssueQuery.builder().build(), new QueryOptions());
+    assertThat(result.projects()).hasSize(1);
+    assertThat(result.components()).hasSize(1);
+  }
+
   private IssueDto getIssue() {
     return new IssueDto()
       .setIssueCreationDate(DateUtils.parseDate("2014-09-04"))
index 452bebb9fcf7c646d6f563c5017cdec5987d1794..c9c614f8c80e8c249adbca25a14ae3eb3fb7da85 100644 (file)
@@ -23,7 +23,7 @@
   <select id="selectByKey" parameterType="String" resultType="Component">
     SELECT <include refid="componentColumns"/>
     FROM projects p
-    INNER JOIN snapshots s ON s.project_id=p.id AND s.islast=${_true}
+    LEFT JOIN snapshots s ON s.project_id=p.id AND s.islast=${_true}
     <where>
       AND p.enabled=${_true}
       AND p.kee=#{key}