summaryrefslogtreecommitdiff
path: root/lib/gitlab/background_migration/populate_merge_requests_latest_merge_request_diff_id.rb
blob: 7e109e96e7366fe21b088f39533cb269b99c176b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
module Gitlab
  module BackgroundMigration
    class PopulateMergeRequestsLatestMergeRequestDiffId
      BATCH_SIZE = 1_000

      class MergeRequest < ActiveRecord::Base
        self.table_name = 'merge_requests'

        include ::EachBatch
      end

      def perform(start_id, stop_id)
        update = '
          latest_merge_request_diff_id = (
            SELECT MAX(id)
            FROM merge_request_diffs
            WHERE merge_requests.id = merge_request_diffs.merge_request_id
          )'.squish

        MergeRequest
          .where(id: start_id..stop_id)
          .where(latest_merge_request_diff_id: nil)
          .each_batch(of: BATCH_SIZE) do |relation|

          relation.update_all(update)
        end
      end
    end
  end
end