]> source.dussan.org Git - sonarqube.git/commitdiff
SONARCLOUD-78 fix project_6m_inactive_projects regarding branches
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Fri, 29 Jun 2018 08:27:34 +0000 (10:27 +0200)
committerSonarTech <sonartech@sonarsource.com>
Tue, 7 Aug 2018 18:21:22 +0000 (20:21 +0200)
server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentQuery.java
server/sonar-db-dao/src/main/resources/org/sonar/db/component/ComponentMapper.xml
server/sonar-db-dao/src/test/java/org/sonar/db/component/ComponentDaoTest.java
server/sonar-db-dao/src/test/java/org/sonar/db/component/ComponentQueryTest.java

index b5afda44e30a184c9abd76bc2893340e1b70d019..b2062ad2a69b954ed5c897c4a468eac4852ac280 100644 (file)
@@ -39,6 +39,7 @@ public class ComponentQuery {
   private final Set<String> componentUuids;
   private final Set<String> componentKeys;
   private final Long analyzedBefore;
+  private final Long anyBranchAnalyzedBefore;
   private final Long anyBranchAnalyzedAfter;
   private final Date createdAfter;
   private final boolean onProvisionedOnly;
@@ -52,6 +53,7 @@ public class ComponentQuery {
     this.componentKeys = builder.componentKeys;
     this.isPrivate = builder.isPrivate;
     this.analyzedBefore = builder.analyzedBefore;
+    this.anyBranchAnalyzedBefore = builder.anyBranchAnalyzedBefore;
     this.anyBranchAnalyzedAfter = builder.anyBranchAnalyzedAfter;
     this.createdAfter = builder.createdAfter;
     this.onProvisionedOnly = builder.onProvisionedOnly;
@@ -106,6 +108,11 @@ public class ComponentQuery {
     return analyzedBefore;
   }
 
+  @CheckForNull
+  public Long getAnyBranchAnalyzedBefore() {
+    return anyBranchAnalyzedBefore;
+  }
+
   @CheckForNull
   public Long getAnyBranchAnalyzedAfter() {
     return anyBranchAnalyzedAfter;
@@ -138,6 +145,7 @@ public class ComponentQuery {
     private Set<String> componentUuids;
     private Set<String> componentKeys;
     private Long analyzedBefore;
+    private Long anyBranchAnalyzedBefore;
     private Long anyBranchAnalyzedAfter;
     private Date createdAfter;
     private boolean onProvisionedOnly = false;
@@ -180,8 +188,13 @@ public class ComponentQuery {
       return this;
     }
 
-    public Builder setAnalyzedBefore(@Nullable Long analyzedBefore) {
-      this.analyzedBefore = analyzedBefore;
+    public Builder setAnalyzedBefore(@Nullable Long l) {
+      this.analyzedBefore = l;
+      return this;
+    }
+
+    public Builder setAnyBranchAnalyzedBefore(@Nullable Long l) {
+      this.anyBranchAnalyzedBefore = l;
       return this;
     }
 
index 2bf6826e053d8dc70b12bfa107f2d31aabbcc51d..4dcc61d5277f51299222f620215b5c85c721f9ff 100644 (file)
           )
         )
       </if>
+      <if test="query.anyBranchAnalyzedBefore != null">
+        and (
+          exists(
+          -- branches of projects
+          select 1 from snapshots s
+          inner join project_branches pb on s.component_uuid = pb.uuid
+          where pb.project_uuid = p.uuid
+          and s.status='P'
+          and s.islast = ${_true}
+          and s.created_at &lt; #{query.anyBranchAnalyzedBefore,jdbcType=BIGINT}
+          )
+          or exists (
+          -- applications, portfolios
+          select 1 from snapshots s
+          where s.component_uuid = p.uuid
+          and s.status='P'
+          and s.islast = ${_true}
+          and s.created_at &lt; #{query.anyBranchAnalyzedBefore,jdbcType=BIGINT}
+          )
+        )
+      </if>
     <if test="query.createdAfter != null">
       and p.created_at &gt;= #{query.createdAfter,jdbcType=TIMESTAMP}
     </if>
index 13bce57e910b1a6a6dc1bada3f2e684d7e950781..b58ef55e99f890c21c3cb5644b6e720052e3afe6 100644 (file)
@@ -1605,7 +1605,7 @@ public class ComponentDaoTest {
     db.components().insertSnapshot(recentProject, s -> s.setCreatedAt(recentTime).setLast(true));
     db.components().insertSnapshot(recentProject, s -> s.setCreatedAt(aLongTimeAgo).setLast(false));
 
-    // before date
+    // before date on main branch
     assertThat(selectProjectUuidsByQuery(q -> q.setAnalyzedBefore(recentTime)))
       .containsExactlyInAnyOrder(oldProject.uuid());
     assertThat(selectProjectUuidsByQuery(q -> q.setAnalyzedBefore(aLongTimeAgo)))
@@ -1613,6 +1613,14 @@ public class ComponentDaoTest {
     assertThat(selectProjectUuidsByQuery(q -> q.setAnalyzedBefore(recentTime + 1_000L)))
       .containsExactlyInAnyOrder(oldProject.uuid(), recentProject.uuid());
 
+    // before date on any branch
+    assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedBefore(recentTime)))
+      .containsExactlyInAnyOrder(oldProject.uuid());
+    assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedBefore(aLongTimeAgo)))
+      .isEmpty();
+    assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedBefore(recentTime + 1_000L)))
+      .containsExactlyInAnyOrder(oldProject.uuid(), recentProject.uuid());
+
     // after date
     assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedAfter(recentTime - 1_000L)))
       .containsExactlyInAnyOrder(recentProject.uuid());
@@ -1637,6 +1645,19 @@ public class ComponentDaoTest {
     db.components().insertSnapshot(recentProjectBranch, s -> s.setCreatedAt(recentTime).setLast(true));
     db.components().insertSnapshot(recentProjectBranch, s -> s.setCreatedAt(aLongTimeAgo).setLast(false));
 
+    // before date on main branch only
+    assertThat(selectProjectUuidsByQuery(q -> q.setAnalyzedBefore(recentTime))).isEmpty();
+    assertThat(selectProjectUuidsByQuery(q -> q.setAnalyzedBefore(aLongTimeAgo))).isEmpty();
+    assertThat(selectProjectUuidsByQuery(q -> q.setAnalyzedBefore(recentTime + 1_000L))).isEmpty();
+
+    // before date on any branch
+    assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedBefore(recentTime)))
+      .containsExactlyInAnyOrder(oldProject.uuid());
+    assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedBefore(aLongTimeAgo)))
+      .isEmpty();
+    assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedBefore(recentTime + 1_000L)))
+      .containsExactlyInAnyOrder(oldProject.uuid(), recentProject.uuid());
+
     // after date
     assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedAfter(recentTime - 1_000L)))
       .containsExactlyInAnyOrder(recentProject.uuid());
index f619b5fe09fa4d8f4023e0a12449b81ba25c7b07..7815d5d5d4e8a5e89a28c220703963b076f68c50 100644 (file)
@@ -39,7 +39,7 @@ public class ComponentQueryTest {
   public void build_query() {
     ComponentQuery underTest = ComponentQuery.builder()
       .setNameOrKeyQuery("key")
-      .setAnalyzedBefore(100L)
+      .setAnyBranchAnalyzedBefore(100L)
       .setAnyBranchAnalyzedAfter(200L)
       .setCreatedAfter(new Date(300L))
       .setQualifiers(PROJECT)
@@ -47,7 +47,7 @@ public class ComponentQueryTest {
 
     assertThat(underTest.getNameOrKeyQuery()).isEqualTo("key");
     assertThat(underTest.getQualifiers()).containsOnly(PROJECT);
-    assertThat(underTest.getAnalyzedBefore()).isEqualTo(100L);
+    assertThat(underTest.getAnyBranchAnalyzedBefore()).isEqualTo(100L);
     assertThat(underTest.getAnyBranchAnalyzedAfter()).isEqualTo(200L);
     assertThat(underTest.getCreatedAfter().getTime()).isEqualTo(300L);
     assertThat(underTest.isOnProvisionedOnly()).isFalse();