Commit 6315d2fd authored by Mark Chao's avatar Mark Chao Committed by Bob Van Landuyt

Only check project rules with MR rule matching condition

Cuts time by not iterating through each project rule.
parent 03d8971a
...@@ -18,18 +18,21 @@ class CorrectApprovalsRequired < ActiveRecord::Migration[5.0] ...@@ -18,18 +18,21 @@ class CorrectApprovalsRequired < ActiveRecord::Migration[5.0]
end end
def up def up
ApprovalProjectRule.find_each do |project_rule| project_rule_ids = ApprovalMergeRequestRule
.joins(:approval_project_rule)
.where('approval_merge_request_rules.approvals_required = 0 AND approval_project_rules.approvals_required > 0')
.pluck('approval_project_rules.id')
ApprovalProjectRule.where(id: project_rule_ids).find_each do |project_rule|
# rubocop:disable GitlabSecurity/SqlInjection # rubocop:disable GitlabSecurity/SqlInjection
target_mr_rules = ApprovalMergeRequestRule # Pluck as MySQL prohibits subquery that references the table being updated
.joins(:approval_project_rule) mr_rule_ids = ApprovalMergeRequestRule
.where("approval_merge_request_rules.approvals_required = 0 AND approval_project_rules.id = #{project_rule.id} AND approval_project_rules.approvals_required > 0") .joins(:approval_merge_request_rule_source)
.select('approval_merge_request_rules.id') .where("approval_merge_request_rules.approvals_required = 0 AND approval_merge_request_rule_sources.approval_project_rule_id = #{project_rule.id}")
.pluck('approval_merge_request_rules.id')
# rubocop:enable GitlabSecurity/SqlInjection # rubocop:enable GitlabSecurity/SqlInjection
# MySQL prohibits subquery that references the table being updated ApprovalMergeRequestRule.where(id: mr_rule_ids).update_all(approvals_required: project_rule.approvals_required)
target_mr_rules = target_mr_rules.pluck(:id)
ApprovalMergeRequestRule.where(id: target_mr_rules).update_all(approvals_required: project_rule.approvals_required)
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment