]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7553 DAO of CE_QUEUE count number of rows by status
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Tue, 19 Apr 2016 14:30:22 +0000 (16:30 +0200)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Wed, 20 Apr 2016 23:23:38 +0000 (01:23 +0200)
sonar-db/src/main/java/org/sonar/db/ce/CeQueueDao.java
sonar-db/src/main/java/org/sonar/db/ce/CeQueueMapper.java
sonar-db/src/main/resources/org/sonar/db/ce/CeQueueMapper.xml
sonar-db/src/test/java/org/sonar/db/ce/CeQueueDaoTest.java

index 779f7372bbf1674f37657ca080933b589b17e622..283b3823443e43c871a88c8613b3dbdf5dfd0bae 100644 (file)
@@ -21,6 +21,7 @@ package org.sonar.db.ce;
 
 import com.google.common.base.Optional;
 import java.util.List;
+import javax.annotation.Nullable;
 import org.apache.ibatis.session.RowBounds;
 import org.sonar.api.utils.System2;
 import org.sonar.db.Dao;
@@ -100,11 +101,11 @@ public class CeQueueDao implements Dao {
   }
 
   public int countByStatus(DbSession dbSession, CeQueueDto.Status status) {
-    return mapper(dbSession).countByStatus(status);
+    return mapper(dbSession).countByStatusAndComponentUuid(status, null);
   }
 
-  public int countAll(DbSession dbSession) {
-    return mapper(dbSession).countAll();
+  public int countByStatusAndComponentUuid(DbSession dbSession, CeQueueDto.Status status, @Nullable String componentUuid) {
+    return mapper(dbSession).countByStatusAndComponentUuid(status, componentUuid);
   }
 
   public Optional<CeQueueDto> peek(DbSession session) {
index 62fca4a7ff195f517e7903d2cf65c461a2c04d14..aa0645987dd5a42afb3a1170b63e87afb4145fd9 100644 (file)
@@ -40,9 +40,7 @@ public interface CeQueueMapper {
   @CheckForNull
   CeQueueDto selectByUuid(@Param("uuid") String uuid);
 
-  int countByStatus(@Param("status") CeQueueDto.Status status);
-
-  int countAll();
+  int countByStatusAndComponentUuid(@Param("status") CeQueueDto.Status status, @Nullable @Param("componentUuid") String componentUuid);
 
   void insert(CeQueueDto dto);
 
index c9924353c1a43643075628761aebc6f043431371..e3d71cc85ac71f70c3e195723003f1af7c9b90ea 100644 (file)
     where cq.uuid=#{uuid}
   </select>
 
-  <select id="countByStatus" parameterType="org.sonar.db.ce.CeQueueDto$Status" resultType="int">
-    select count(1) from ce_queue where status=#{status}
+  <select id="countByStatusAndComponentUuid" parameterType="map" resultType="int">
+    select count(1)
+    from ce_queue
+    where status=#{status}
+    <if test="componentUuid!=null">
+      and component_uuid=#{componentUuid}
+    </if>
   </select>
 
   <select id="countAll" resultType="int">
index 70fc652ad83fe2be978fb5d5722d3cc06621f1a8..30c4694047b40067b64b34511589d5401fecc208 100644 (file)
@@ -139,7 +139,7 @@ public class CeQueueDaoTest {
     system2.setNow(INIT_TIME + 3_000_000);
     insert(TASK_UUID_2, COMPONENT_UUID_2, PENDING);
 
-    assertThat(underTest.countAll(db.getSession())).isEqualTo(2);
+    assertThat(db.countRowsOfTable("ce_queue")).isEqualTo(2);
     verifyCeQueueStatuses(TASK_UUID_1, PENDING, TASK_UUID_2, PENDING);
 
     // peek first one
@@ -284,6 +284,31 @@ public class CeQueueDaoTest {
     assertThat(total).isEqualTo(0);
   }
 
+  @Test
+  public void count_by_status_and_component_uuid() {
+    // task retrieved in the queue
+    insert(newCeQueueDto(TASK_UUID_1)
+      .setComponentUuid(COMPONENT_UUID_1)
+      .setStatus(IN_PROGRESS)
+      .setTaskType(CeTaskTypes.REPORT)
+      .setCreatedAt(100_000L));
+    // on component uuid 2, not returned
+    insert(newCeQueueDto(TASK_UUID_2)
+      .setComponentUuid(COMPONENT_UUID_2)
+      .setStatus(IN_PROGRESS)
+      .setTaskType(CeTaskTypes.REPORT)
+      .setCreatedAt(100_000L));
+    // pending status, not returned
+    insert(newCeQueueDto(TASK_UUID_3)
+      .setComponentUuid(COMPONENT_UUID_1)
+      .setStatus(PENDING)
+      .setTaskType(CeTaskTypes.REPORT)
+      .setCreatedAt(100_000L));
+
+    assertThat(underTest.countByStatusAndComponentUuid(db.getSession(), IN_PROGRESS, COMPONENT_UUID_1)).isEqualTo(1);
+    assertThat(underTest.countByStatus(db.getSession(), IN_PROGRESS)).isEqualTo(2);
+  }
+
   private void insert(CeQueueDto dto) {
     underTest.insert(db.getSession(), dto);
     db.commit();
@@ -314,12 +339,13 @@ public class CeQueueDaoTest {
     });
   }
 
-  private void verifyCeQueueStatuses(String taskUuid1, CeQueueDto.Status taskStatus1, String taskUuid2, CeQueueDto.Status taskStatus2, String taskUuid3, CeQueueDto.Status taskStatus3) {
-    verifyCeQueueStatuses(new String[]{taskUuid1, taskUuid2, taskUuid3}, new CeQueueDto.Status[]{taskStatus1, taskStatus2, taskStatus3});
+  private void verifyCeQueueStatuses(String taskUuid1, CeQueueDto.Status taskStatus1, String taskUuid2, CeQueueDto.Status taskStatus2, String taskUuid3,
+    CeQueueDto.Status taskStatus3) {
+    verifyCeQueueStatuses(new String[] {taskUuid1, taskUuid2, taskUuid3}, new CeQueueDto.Status[] {taskStatus1, taskStatus2, taskStatus3});
   }
 
   private void verifyCeQueueStatuses(String taskUuid1, CeQueueDto.Status taskStatus1, String taskUuid2, CeQueueDto.Status taskStatus2) {
-    verifyCeQueueStatuses(new String[]{taskUuid1, taskUuid2}, new CeQueueDto.Status[]{taskStatus1, taskStatus2});
+    verifyCeQueueStatuses(new String[] {taskUuid1, taskUuid2}, new CeQueueDto.Status[] {taskStatus1, taskStatus2});
   }
 
   private void verifyCeQueueStatuses(String[] taskUuids, CeQueueDto.Status[] statuses) {