]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8985 SONAR-9040 rename CeQueueDao#updateIfStatus to updateIf
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Mon, 27 Mar 2017 10:26:36 +0000 (12:26 +0200)
committerEric Hartmann <hartmann.eric@gmail.Com>
Thu, 27 Apr 2017 07:23:18 +0000 (09:23 +0200)
for method to take in parameter types rather than Strings
to support upcoming new properties to update and new conditions

server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeQueueDao.java
server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeQueueMapper.java
server/sonar-db-dao/src/main/java/org/sonar/db/ce/UpdateIf.java [new file with mode: 0644]
server/sonar-db-dao/src/main/resources/org/sonar/db/ce/CeQueueMapper.xml

index 7a4073fe5637f9e31ea2a4eabfbbd5e5592faf92..d85b5e82ef7a1cce9a07cd701629cf93bc7b8188 100644 (file)
@@ -120,7 +120,9 @@ public class CeQueueDao implements Dao {
   }
 
   private Optional<CeQueueDto> tryToPeek(DbSession session, String taskUuid) {
-    int touchedRows = mapper(session).updateIfStatus(taskUuid, IN_PROGRESS, system2.now(), system2.now(), PENDING);
+    int touchedRows = mapper(session).updateIf(taskUuid,
+      new UpdateIf.NewProperties(IN_PROGRESS, system2.now(), system2.now()),
+      new UpdateIf.OldProperties(PENDING));
     if (touchedRows != 1) {
       return Optional.absent();
     }
index e3556a9e05a210655d3d92ec63adfa80f9e5cc8d..ecaaa0c9130d99f12c9c2b5c6cb9095abe7b695d 100644 (file)
@@ -46,11 +46,10 @@ public interface CeQueueMapper {
 
   void resetAllToPendingStatus(@Param("updatedAt") long updatedAt);
 
-  int updateIfStatus(@Param("uuid") String uuid,
-    @Param("newStatus") CeQueueDto.Status newStatus,
-    @Nullable @Param("startedAt") Long startedAt,
-    @Param("updatedAt") long updatedAt,
-    @Param("oldStatus") CeQueueDto.Status oldStatus);
+  int updateIf(@Param("uuid") String uuid,
+    @Param("new") UpdateIf.NewProperties newProperties,
+    @Param("old") UpdateIf.OldProperties oldProperties);
 
   void deleteByUuid(@Param("uuid") String uuid);
+
 }
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/UpdateIf.java b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/UpdateIf.java
new file mode 100644 (file)
index 0000000..e5912fc
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2017 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.db.ce;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.concurrent.Immutable;
+
+import static java.util.Objects.requireNonNull;
+
+final class UpdateIf {
+  private UpdateIf() {
+    // just a wrapping class, prevent instantiation
+  }
+
+  @Immutable
+  public static class NewProperties {
+    private final CeQueueDto.Status status;
+    private final Long startedAt;
+    private final long updatedAt;
+
+    NewProperties(CeQueueDto.Status status, Long startedAt, long updatedAt) {
+      this.status = requireNonNull(status, "status can't be null");
+      this.startedAt = startedAt;
+      this.updatedAt = updatedAt;
+    }
+
+    public CeQueueDto.Status getStatus() {
+      return status;
+    }
+
+    @CheckForNull
+    public Long getStartedAt() {
+      return startedAt;
+    }
+
+    public long getUpdatedAt() {
+      return updatedAt;
+    }
+  }
+
+  @Immutable
+  public static class OldProperties {
+    private final CeQueueDto.Status status;
+
+    OldProperties(CeQueueDto.Status status) {
+      this.status = requireNonNull(status, "status can't be null");
+    }
+
+    public CeQueueDto.Status getStatus() {
+      return status;
+    }
+  }
+
+}
index f632e08e3b1babd706e6c1c90983b84030d7fa18..b7fa15219e137f1a2fe188479789c54f432aff27 100644 (file)
       status &lt;&gt; 'PENDING'
   </update>
 
-  <update id="updateIfStatus" parameterType="map">
+  <update id="updateIf" parameterType="map">
     update ce_queue set
-      status=#{newStatus,jdbcType=VARCHAR},
-      started_at=#{startedAt,jdbcType=BIGINT},
-      updated_at=#{updatedAt,jdbcType=BIGINT}
+      status=#{new.status,jdbcType=VARCHAR},
+      started_at=#{new.startedAt,jdbcType=BIGINT},
+      updated_at=#{new.updatedAt,jdbcType=BIGINT}
     where
       uuid=#{uuid,jdbcType=VARCHAR}
-      and status=#{oldStatus,jdbcType=VARCHAR}
+      and status=#{old.status,jdbcType=VARCHAR}
   </update>
 
   <delete id="deleteByUuid">