From 346f58249242c0ccf278175c78fc000976912771 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Thu, 10 Nov 2016 22:38:19 -0200 Subject: Use subqueries instead of joins to migrate subscriptions --- ...61031174110_migrate_subscriptions_project_id.rb | 63 +++++++++------------- 1 file changed, 24 insertions(+), 39 deletions(-) diff --git a/db/migrate/20161031174110_migrate_subscriptions_project_id.rb b/db/migrate/20161031174110_migrate_subscriptions_project_id.rb index b890a294431..9e1bdb7c567 100644 --- a/db/migrate/20161031174110_migrate_subscriptions_project_id.rb +++ b/db/migrate/20161031174110_migrate_subscriptions_project_id.rb @@ -5,50 +5,35 @@ class MigrateSubscriptionsProjectId < ActiveRecord::Migration DOWNTIME_REASON = 'Subscriptions will not work as expected until this migration is complete.' def up - if Gitlab::Database.mysql? - execute <<-EOF.strip_heredoc - UPDATE subscriptions - INNER JOIN issues ON issues.id = subscriptions.subscribable_id AND subscriptions.subscribable_type = 'Issue' - SET subscriptions.project_id = issues.project_id; - EOF - - execute <<-EOF.strip_heredoc - UPDATE subscriptions - INNER JOIN merge_requests ON merge_requests.id = subscriptions.subscribable_id AND subscriptions.subscribable_type = 'MergeRequest' - SET subscriptions.project_id = merge_requests.target_project_id; - EOF - - execute <<-EOF.strip_heredoc - UPDATE subscriptions - INNER JOIN labels ON labels.id = subscriptions.subscribable_id AND subscriptions.subscribable_type = 'Label' - INNER JOIN projects ON projects.id = labels.project_id - SET subscriptions.project_id = projects.id; - EOF - else - execute <<-EOF.strip_heredoc - UPDATE subscriptions - SET project_id = issues.project_id + execute <<-EOF.strip_heredoc + UPDATE subscriptions + SET project_id = ( + SELECT issues.project_id FROM issues - WHERE issues.id = subscriptions.subscribable_id - AND subscriptions.subscribable_type = 'Issue'; - EOF + WHERE issues.id = subscriptions.subscribable_id AND subscriptions.subscribable_type = 'Issue' + ) + WHERE subscriptions.subscribable_type = 'Issue'; + EOF - execute <<-EOF.strip_heredoc - UPDATE subscriptions - SET project_id = merge_requests.target_project_id + execute <<-EOF.strip_heredoc + UPDATE subscriptions + SET project_id = ( + SELECT merge_requests.target_project_id FROM merge_requests - WHERE merge_requests.id = subscriptions.subscribable_id - AND subscriptions.subscribable_type = 'MergeRequest'; - EOF + WHERE merge_requests.id = subscriptions.subscribable_id AND subscriptions.subscribable_type = 'MergeRequest' + ) + WHERE subscriptions.subscribable_type = 'MergeRequest'; + EOF - execute <<-EOF.strip_heredoc - UPDATE subscriptions - SET project_id = projects.id + execute <<-EOF.strip_heredoc + UPDATE subscriptions + SET project_id = ( + SELECT projects.id FROM labels INNER JOIN projects ON projects.id = labels.project_id - WHERE labels.id = subscriptions.subscribable_id - AND subscriptions.subscribable_type = 'Label'; - EOF - end + WHERE labels.id = subscriptions.subscribable_id AND subscriptions.subscribable_type = 'Label' + ) + WHERE subscriptions.subscribable_type = 'Label'; + EOF end def down -- cgit v1.2.1