]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-13221 remove rules parameters orphans rows
authorPierre <pierre.guillot@sonarsource.com>
Fri, 29 May 2020 13:00:02 +0000 (15:00 +0200)
committersonartech <sonartech@sonarsource.com>
Fri, 29 May 2020 20:04:39 +0000 (20:04 +0000)
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v84/rules/rulesparameters/PopulateRulesParametersRuleUuidColumn.java
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v84/rules/rulesparameters/PopulateRulesParametersRuleUuidColumnTest.java

index 24d28e8047d17841f218c5af60a57210e8bd1909..de81e73652576ec1d0c76e37f32699dc60b050e3 100644 (file)
@@ -32,6 +32,11 @@ public class PopulateRulesParametersRuleUuidColumn extends DataChange {
 
   @Override
   protected void execute(Context context) throws SQLException {
+    populateUuids(context);
+    removeOrphans(context);
+  }
+
+  private void populateUuids(Context context) throws SQLException {
     MassUpdate massUpdate = context.prepareMassUpdate();
 
     massUpdate.select("select rp.rule_id, ru.uuid " +
@@ -46,4 +51,16 @@ public class PopulateRulesParametersRuleUuidColumn extends DataChange {
       return true;
     });
   }
+
+  private void removeOrphans(DataChange.Context context) throws SQLException {
+    MassUpdate massUpdate = context.prepareMassUpdate();
+
+    massUpdate.select("select uuid from rules_parameters where rule_uuid is null");
+    massUpdate.update("delete from rules_parameters where uuid = ?");
+
+    massUpdate.execute((row, update) -> {
+      update.setString(1, row.getString(1));
+      return true;
+    });
+  }
 }
index 3c85f13992d0a7d9fac6f0978cb530071584ace9..5706af05932adb162551d7a81977580d5106a65b 100644 (file)
@@ -61,6 +61,22 @@ public class PopulateRulesParametersRuleUuidColumnTest {
         tuple("uuid-rp-3", 2L, "uuid-rule-2"));
   }
 
+  @Test
+  public void remove_orphans() throws SQLException {
+    insertRulesParametersEntry("uuid-rp-4", 666L);
+
+    underTest.execute();
+
+    assertThat(db.countSql("select count(*) from rules_parameters"))
+      .isEqualTo(3);
+    assertThat(db.select("select uuid, rule_id, rule_uuid from rules_parameters"))
+      .extracting(m -> m.get("UUID"), m -> m.get("RULE_ID"), m -> m.get("RULE_UUID"))
+      .containsExactlyInAnyOrder(
+        tuple("uuid-rp-1", 1L, "uuid-rule-1"),
+        tuple("uuid-rp-2", 1L, "uuid-rule-1"),
+        tuple("uuid-rp-3", 2L, "uuid-rule-2"));
+  }
+
   private void insertRule(long id, String uuid) {
     db.executeInsert("rules",
       "id", id,