debian-mirror-gitlab/db/migrate/20210323155010_populate_dismissal_information_for_vulnerabilities.rb
2021-04-29 21:17:54 +05:30

38 lines
924 B
Ruby

# frozen_string_literal: true
class PopulateDismissalInformationForVulnerabilities < ActiveRecord::Migration[6.0]
DOWNTIME = false
BATCH_SIZE = 100
UPDATE_QUERY = <<~SQL
UPDATE
vulnerabilities
SET
dismissed_at = COALESCE(dismissed_at, updated_at),
dismissed_by_id = COALESCE(dismissed_by_id, updated_by_id, last_edited_by_id, author_id)
WHERE
vulnerabilities.id IN (%{ids})
SQL
class Vulnerability < ActiveRecord::Base
include EachBatch
self.table_name = 'vulnerabilities'
enum state: { detected: 1, confirmed: 4, resolved: 3, dismissed: 2 }
scope :broken, -> { dismissed.where('dismissed_at IS NULL OR dismissed_by_id IS NULL') }
end
def up
Vulnerability.broken.each_batch(of: BATCH_SIZE) do |batch|
query = format(UPDATE_QUERY, ids: batch.select(:id).to_sql)
connection.execute(query)
end
end
def down
# no-op
end
end