Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
heptapod
heptapod
Commits
0917eac9d083
Commit
d369acb5
authored
Feb 07, 2017
by
Jarka Kadlecova
Browse files
Improve issues filtering performance
parent
6414e9247b99
Changes
4
Hide whitespace changes
Inline
Side-by-side
app/finders/issuable_finder.rb
View file @
0917eac9
...
...
@@ -33,15 +33,17 @@ def execute
items
=
by_scope
(
items
)
items
=
by_state
(
items
)
items
=
by_group
(
items
)
items
=
by_project
(
items
)
items
=
by_search
(
items
)
items
=
by_milestone
(
items
)
items
=
by_assignee
(
items
)
items
=
by_author
(
items
)
items
=
by_label
(
items
)
items
=
by_due_date
(
items
)
items
=
by_non_archived
(
items
)
items
=
by_iids
(
items
)
items
=
by_milestone
(
items
)
items
=
by_label
(
items
)
# Filtering by project HAS TO be the last because we use the project IDs yielded by the issuable query thus far
items
=
by_project
(
items
)
sort
(
items
)
end
...
...
@@ -107,8 +109,7 @@ def project
@project
=
project
end
def
projects
return
@projects
if
defined?
(
@projects
)
def
projects
(
items
=
nil
)
return
@projects
=
project
if
project?
projects
=
...
...
@@ -117,7 +118,7 @@ def projects
elsif
group
GroupProjectsFinder
.
new
(
group
).
execute
(
current_user
)
else
P
rojects
F
inder
.
new
.
execute
(
current_user
)
p
rojects
_f
inder
.
execute
(
current_user
,
item_project_ids
(
items
)
)
end
@projects
=
projects
.
with_feature_available_for_user
(
klass
,
current_user
).
reorder
(
nil
)
...
...
@@ -257,9 +258,9 @@ def by_group(items)
def
by_project
(
items
)
items
=
if
project?
items
.
of_projects
(
projects
).
references_project
elsif
projects
items
.
merge
(
projects
.
reorder
(
nil
)).
join_project
items
.
of_projects
(
projects
(
items
)
).
references_project
elsif
projects
(
items
)
items
.
merge
(
projects
(
items
)
.
reorder
(
nil
)).
join_project
else
items
.
none
end
...
...
@@ -314,13 +315,14 @@ def by_milestone(items)
if
filter_by_no_milestone?
items
=
items
.
left_joins_milestones
.
where
(
milestone_id:
[
-
1
,
nil
])
elsif
filter_by_upcoming_milestone?
upcoming_ids
=
Milestone
.
upcoming_ids_by_projects
(
projects
)
upcoming_ids
=
Milestone
.
upcoming_ids_by_projects
(
projects
(
items
)
)
items
=
items
.
left_joins_milestones
.
where
(
milestone_id:
upcoming_ids
)
else
items
=
items
.
with_milestone
(
params
[
:milestone_title
])
items_projects
=
projects
(
items
)
if
projects
items
=
items
.
where
(
milestones:
{
project_id:
projects
})
if
items_
projects
items
=
items
.
where
(
milestones:
{
project_id:
items_
projects
})
end
end
end
...
...
@@ -334,9 +336,10 @@ def by_label(items)
items
=
items
.
without_label
else
items
=
items
.
with_label
(
label_names
,
params
[
:sort
])
items_projects
=
projects
(
items
)
if
projects
label_ids
=
LabelsFinder
.
new
(
current_user
,
project_ids:
projects
).
execute
(
skip_authorization:
true
).
select
(
:id
)
if
items_
projects
label_ids
=
LabelsFinder
.
new
(
current_user
,
project_ids:
items_
projects
).
execute
(
skip_authorization:
true
).
select
(
:id
)
items
=
items
.
where
(
labels:
{
id:
label_ids
})
end
end
...
...
@@ -396,4 +399,8 @@ def by_non_archived(items)
def
current_user_related?
params
[
:scope
]
==
'created-by-me'
||
params
[
:scope
]
==
'authored'
||
params
[
:scope
]
==
'assigned-to-me'
end
def
projects_finder
@projects_finder
||=
ProjectsFinder
.
new
end
end
app/finders/issues_finder.rb
View file @
0917eac9
...
...
@@ -41,4 +41,8 @@ def self.not_restricted_by_confidentiality(user)
user_id:
user
.
id
,
project_ids:
user
.
authorized_projects
(
Gitlab
::
Access
::
REPORTER
).
select
(
:id
))
end
def
item_project_ids
(
items
)
items
&
.
reorder
(
nil
)
&
.
select
(
:project_id
)
end
end
app/finders/merge_requests_finder.rb
View file @
0917eac9
...
...
@@ -20,4 +20,10 @@ class MergeRequestsFinder < IssuableFinder
def
klass
MergeRequest
end
private
def
item_project_ids
(
items
)
items
&
.
reorder
(
nil
)
&
.
select
(
:target_project_id
)
end
end
changelogs/unreleased/25503_issues_finder_performance.yml
0 → 100644
View file @
0917eac9
---
title
:
Filter by projects in the end of search
merge_request
:
9030
author
:
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment