From 5f2b527e01b997a551a1a57779a57a80c1ba3411 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Thu, 2 May 2013 12:18:29 +0200 Subject: [PATCH] SONAR-3755 Add action_plans_issues table and add purge of all issues tables --- .../sonar/core/persistence/DatabaseUtils.java | 1 + .../core/persistence/DatabaseVersion.java | 2 +- .../org/sonar/core/purge/PurgeCommands.java | 21 +++++++++++ .../org/sonar/core/purge/PurgeMapper.java | 7 ++++ .../org/sonar/core/persistence/rows-h2.sql | 1 + .../org/sonar/core/persistence/schema-h2.ddl | 9 +++++ .../org/sonar/core/purge/PurgeMapper.xml | 12 ++++++ .../sonar/core/purge/PurgeCommandsTest.java | 2 +- .../org/sonar/core/purge/PurgeDaoTest.java | 2 +- .../shouldDeleteResource.xml | 5 +++ .../PurgeDaoTest/shouldDeleteProject.xml | 10 +++++ .../migrate/393_create_action_plans_issues.rb | 37 +++++++++++++++++++ 12 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 sonar-server/src/main/webapp/WEB-INF/db/migrate/393_create_action_plans_issues.rb diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseUtils.java b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseUtils.java index b2ed5c6be76..df03d505843 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseUtils.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseUtils.java @@ -42,6 +42,7 @@ public final class DatabaseUtils { */ static final String[] TABLE_NAMES = { "action_plans", + "action_plans_issues", "action_plans_reviews", "active_dashboards", "active_rules", diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java index e5fd64348f0..7b6db8321bf 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java @@ -32,7 +32,7 @@ import java.util.List; */ public class DatabaseVersion implements BatchComponent, ServerComponent { - public static final int LAST_VERSION = 392; + public static final int LAST_VERSION = 393; public static enum Status { UP_TO_DATE, REQUIRES_UPGRADE, REQUIRES_DOWNGRADE, FRESH_INSTALL diff --git a/sonar-core/src/main/java/org/sonar/core/purge/PurgeCommands.java b/sonar-core/src/main/java/org/sonar/core/purge/PurgeCommands.java index 1ef2b783982..67d65e69b0d 100644 --- a/sonar-core/src/main/java/org/sonar/core/purge/PurgeCommands.java +++ b/sonar-core/src/main/java/org/sonar/core/purge/PurgeCommands.java @@ -121,6 +121,27 @@ class PurgeCommands { session.commit(); profiler.stop(); + profiler.start("deleteResourceIssueChanges (issue_changes)"); + for (Long resourceId : resourceIds) { + purgeMapper.deleteResourceIssueChanges(resourceId); + } + session.commit(); + profiler.stop(); + + profiler.start("deleteResourceActionPlansIssues (action_plans_issues)"); + for (Long resourceId : resourceIds) { + purgeMapper.deleteResourceActionPlansIssues(resourceId); + } + session.commit(); + profiler.stop(); + + profiler.start("deleteResourceIssues (issues)"); + for (Long resourceId : resourceIds) { + purgeMapper.deleteResourceIssues(resourceId); + } + session.commit(); + profiler.stop(); + profiler.start("deleteResourceActionPlans (action_plans)"); for (Long resourceId : resourceIds) { purgeMapper.deleteResourceActionPlans(resourceId); diff --git a/sonar-core/src/main/java/org/sonar/core/purge/PurgeMapper.java b/sonar-core/src/main/java/org/sonar/core/purge/PurgeMapper.java index 3db4683fc7f..41632dabe16 100644 --- a/sonar-core/src/main/java/org/sonar/core/purge/PurgeMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/purge/PurgeMapper.java @@ -100,4 +100,11 @@ public interface PurgeMapper { void deleteResourceActionPlansReviews(long resourceId); void deleteSnapshotData(long snapshotId); + + void deleteResourceActionPlansIssues(long resourceId); + + void deleteResourceIssueChanges(long resourceId); + + void deleteResourceIssues(long resourceId); + } diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql index 2618646ea53..1ea246041f5 100644 --- a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql +++ b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql @@ -160,6 +160,7 @@ INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('389'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('390'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('391'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('392'); +INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('393'); INSERT INTO USERS(ID, LOGIN, NAME, EMAIL, CRYPTED_PASSWORD, SALT, CREATED_AT, UPDATED_AT, REMEMBER_TOKEN, REMEMBER_TOKEN_EXPIRES_AT) VALUES (1, 'admin', 'Administrator', '', 'a373a0e667abb2604c1fd571eb4ad47fe8cc0878', '48bc4b0d93179b5103fd3885ea9119498e9d161b', '2011-09-26 22:27:48.0', '2011-09-26 22:27:48.0', null, null); ALTER TABLE USERS ALTER COLUMN ID RESTART WITH 2; diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl b/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl index 51ea3f16086..34f3fd55b10 100644 --- a/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl +++ b/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl @@ -550,6 +550,11 @@ CREATE TABLE "ISSUE_CHANGES" ( "UPDATED_AT" TIMESTAMP, ); +CREATE TABLE "ACTION_PLANS_ISSUES" ( + "ACTION_PLAN_ID" INTEGER, + "ISSUE_ID" INTEGER +); + CREATE TABLE "SNAPSHOT_DATA" ( "ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1), "SNAPSHOT_ID" INTEGER, @@ -674,6 +679,10 @@ CREATE UNIQUE INDEX "GRAPHS_PERSPECTIVES" ON "GRAPHS" ("SNAPSHOT_ID", "PERSPECTI CREATE INDEX "ISSUES_RESOURCE_ID" ON "ISSUES" ("RESOURCE_ID"); +CREATE INDEX "INDEX_ACTION_PLANS_ISSUES_ON_ACTION_PLAN_ID" ON "ACTION_PLANS_ISSUES" ("ACTION_PLAN_ID"); + +CREATE INDEX "INDEX_ACTION_PLANS_ISSUES_ON_ISSUE_ID" ON "ACTION_PLANS_ISSUES" ("ISSUE_ID"); + --CREATE INDEX "ISSUES_RULE_ID" ON "ISSUES" ("RULE_ID"); --CREATE INDEX "SNAPSHOT_DATA_SNAPSHOT_ID" ON "SNAPSHOT_DATA" ("SNAPSHOT_ID"); diff --git a/sonar-core/src/main/resources/org/sonar/core/purge/PurgeMapper.xml b/sonar-core/src/main/resources/org/sonar/core/purge/PurgeMapper.xml index 9e9d09df623..19234980e1d 100644 --- a/sonar-core/src/main/resources/org/sonar/core/purge/PurgeMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/purge/PurgeMapper.xml @@ -239,5 +239,17 @@ delete apr from action_plans_reviews as apr, action_plans as ap where ap.id=apr.action_plan_id and ap.project_id=#{id} + + delete from action_plans_issues api where exists (select * from action_plans ap where ap.id=api.action_plan_id and ap.project_id=#{id}) + + + + delete from issue_changes ic where exists (select * from issues i where ic.issue_key=i.kee and i.resource_id=#{id}) + + + + delete from issues where resource_id=#{id} + + diff --git a/sonar-core/src/test/java/org/sonar/core/purge/PurgeCommandsTest.java b/sonar-core/src/test/java/org/sonar/core/purge/PurgeCommandsTest.java index 0faf10d96ac..ba7a7208d6b 100644 --- a/sonar-core/src/test/java/org/sonar/core/purge/PurgeCommandsTest.java +++ b/sonar-core/src/test/java/org/sonar/core/purge/PurgeCommandsTest.java @@ -92,7 +92,7 @@ public class PurgeCommandsTest extends AbstractDaoTestCase { } finally { MyBatis.closeQuietly(session); } - assertEmptyTables("projects", "snapshots", "events", "reviews", "review_comments", "authors"); + assertEmptyTables("projects", "snapshots", "events", "reviews", "review_comments", "issues", "issue_changes", "authors"); } } diff --git a/sonar-core/src/test/java/org/sonar/core/purge/PurgeDaoTest.java b/sonar-core/src/test/java/org/sonar/core/purge/PurgeDaoTest.java index 83bb049c0e7..038cc711685 100644 --- a/sonar-core/src/test/java/org/sonar/core/purge/PurgeDaoTest.java +++ b/sonar-core/src/test/java/org/sonar/core/purge/PurgeDaoTest.java @@ -111,7 +111,7 @@ public class PurgeDaoTest extends AbstractDaoTestCase { public void shouldDeleteProject() { setupData("shouldDeleteProject"); dao.deleteResourceTree(1L); - assertEmptyTables("projects", "snapshots", "action_plans", "action_plans_reviews", "reviews", "review_comments"); + assertEmptyTables("projects", "snapshots", "action_plans", "action_plans_reviews", "reviews", "review_comments", "issues", "issue_changes", "action_plans_issues"); } static final class SnapshotMatcher extends BaseMatcher { diff --git a/sonar-core/src/test/resources/org/sonar/core/purge/PurgeCommandsTest/shouldDeleteResource.xml b/sonar-core/src/test/resources/org/sonar/core/purge/PurgeCommandsTest/shouldDeleteResource.xml index ff3b37a56ea..f603e893826 100644 --- a/sonar-core/src/test/resources/org/sonar/core/purge/PurgeCommandsTest/shouldDeleteResource.xml +++ b/sonar-core/src/test/resources/org/sonar/core/purge/PurgeCommandsTest/shouldDeleteResource.xml @@ -24,6 +24,11 @@ + + + + \ No newline at end of file diff --git a/sonar-core/src/test/resources/org/sonar/core/purge/PurgeDaoTest/shouldDeleteProject.xml b/sonar-core/src/test/resources/org/sonar/core/purge/PurgeDaoTest/shouldDeleteProject.xml index 8888c64bb0f..3df0470a044 100644 --- a/sonar-core/src/test/resources/org/sonar/core/purge/PurgeDaoTest/shouldDeleteProject.xml +++ b/sonar-core/src/test/resources/org/sonar/core/purge/PurgeDaoTest/shouldDeleteProject.xml @@ -21,6 +21,8 @@ + + @@ -31,6 +33,14 @@ + + + + + + false do |t| + t.integer :action_plan_id + t.integer :issue_id + end + + add_index "action_plans_issues", "action_plan_id", :name => 'I_ACT_PLA_ISSUE_ACT_PLA_ID' + add_index "action_plans_issues", "issue_id", :name => 'I_ACT_PLA_ISSUE_ISSUE_ID' + end + +end + -- 2.39.5