38 lines
1.0 KiB
Ruby
38 lines
1.0 KiB
Ruby
class AddForeignKeyToMergeRequests < ActiveRecord::Migration
|
|
include Gitlab::Database::MigrationHelpers
|
|
|
|
DOWNTIME = false
|
|
|
|
disable_ddl_transaction!
|
|
|
|
class MergeRequest < ActiveRecord::Base
|
|
self.table_name = 'merge_requests'
|
|
include ::EachBatch
|
|
end
|
|
|
|
def up
|
|
scope = <<-SQL.strip_heredoc
|
|
head_pipeline_id IS NOT NULL
|
|
AND NOT EXISTS (
|
|
SELECT 1 FROM ci_pipelines
|
|
WHERE ci_pipelines.id = merge_requests.head_pipeline_id
|
|
)
|
|
SQL
|
|
|
|
MergeRequest.where(scope).each_batch(of: 1000) do |merge_requests|
|
|
merge_requests.update_all(head_pipeline_id: nil)
|
|
end
|
|
|
|
unless foreign_key_exists?(:merge_requests, column: :head_pipeline_id)
|
|
add_concurrent_foreign_key(:merge_requests, :ci_pipelines,
|
|
column: :head_pipeline_id, on_delete: :nullify)
|
|
end
|
|
end
|
|
|
|
def down
|
|
if foreign_key_exists?(:merge_requests, column: :head_pipeline_id)
|
|
remove_foreign_key(:merge_requests, column: :head_pipeline_id)
|
|
end
|
|
end
|
|
end
|