diff options
Diffstat (limited to 'lib/gitlab/background_migration/fix_promoted_epics_discussion_ids.rb')
-rw-r--r-- | lib/gitlab/background_migration/fix_promoted_epics_discussion_ids.rb | 32 |
1 files changed, 3 insertions, 29 deletions
diff --git a/lib/gitlab/background_migration/fix_promoted_epics_discussion_ids.rb b/lib/gitlab/background_migration/fix_promoted_epics_discussion_ids.rb index 8c910f66fc8..77c317741e9 100644 --- a/lib/gitlab/background_migration/fix_promoted_epics_discussion_ids.rb +++ b/lib/gitlab/background_migration/fix_promoted_epics_discussion_ids.rb @@ -12,35 +12,9 @@ module Gitlab end def perform(discussion_ids) - discussion_values = build_discussion_values(discussion_ids) - - update_notes_discussion_ids(discussion_values) if discussion_values - end - - def build_discussion_values(discussion_ids) - discussion_ids.map do |discussion_id| - new_id = generate_id(discussion_id) - - ActiveRecord::Base.sanitize_sql(["(?, ?)", discussion_id, new_id]) - end.join(', ') - end - - def update_notes_discussion_ids(values) - sql = <<-SQL.squish - UPDATE notes SET discussion_id = v.new_discussion_id - FROM ( - VALUES - #{values} - ) AS v(old_discussion_id, new_discussion_id) - WHERE notes.discussion_id = v.old_discussion_id - AND notes.noteable_type = 'Epic' - SQL - - Note.connection.execute(sql) - end - - def generate_id(id) - Digest::SHA1.hexdigest([:discussion, 'epic', id, SecureRandom.hex].join("-")) + Note.where(noteable_type: 'Epic') + .where(discussion_id: discussion_ids) + .update_all("discussion_id=MD5(discussion_id)||substring(discussion_id from 1 for 8)") end end end |