blob: e44354f36d1d40940426506a65da97e49662a059 (
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
31
32
33
34
35
36
37
38
39
40
41
|
# frozen_string_literal: true
module MergedAtFilter
private
def by_merged_at(items)
return items unless merged_after || merged_before
mr_metrics_scope = MergeRequest::Metrics
mr_metrics_scope = mr_metrics_scope.merged_after(merged_after) if merged_after.present?
mr_metrics_scope = mr_metrics_scope.merged_before(merged_before) if merged_before.present?
join_metrics(items, mr_metrics_scope)
end
def merged_after
params[:merged_after]
end
def merged_before
params[:merged_before]
end
# rubocop: disable CodeReuse/ActiveRecord
#
# This join optimizes merged_at queries when the finder is invoked for a project by moving
# the target_project_id condition from merge_requests table to merge_request_metrics table.
def join_metrics(items, mr_metrics_scope)
scope = if project_id = items.where_values_hash["target_project_id"]
# removing the original merge_requests.target_project_id condition
items = items.unscope(where: :target_project_id)
# adding the target_project_id condition to merge_request_metrics
items.join_metrics(project_id)
else
items.join_metrics
end
scope.merge(mr_metrics_scope)
end
# rubocop: enable CodeReuse/ActiveRecord
end
|