gitlab-org--gitlab-foss/app/finders
Jan Provaznik 090ca9c33e Use limit for search count queries
Search query is especially slow if a user searches a generic string
which matches many records, in such case search can take tens of
seconds or time out. To speed up the search query, we search only for
first 1000 records, if there is >1000 matching records we just display
"1000+" instead of precise total count supposing that with such amount
the exact count is not so important for the user.

Because for issues even limited search was not fast enough, 2-phase
approach is used for issues: first we use simpler/faster query to get
all public issues, if this exceeds the limit, we just return the limit.
If the amount of matching results is lower than limit, we re-run more
complex search query (which includes also confidential issues).
Re-running the complex query should be fast enough in such case because the
amount of matching issues is lower than limit.

Because exact total_count is now limited, this patch also switches to
to "prev/next" pagination.

Related #40540
2018-01-23 22:33:42 +01:00
..
admin Add an option to list only archived projects 2017-08-24 10:11:07 +02:00
concerns Support custom attributes on users 2017-09-28 16:49:42 +00:00
access_requests_finder.rb
autocomplete_users_finder.rb Fix users autocomplete in a subgroup 2017-11-13 13:19:54 +00:00
branches_finder.rb Add case insensitive branches search 2017-10-23 06:37:25 +03:00
clusters_finder.rb Use attr_reader instead of instance variables 2017-11-28 14:39:18 +01:00
contributed_projects_finder.rb
environments_finder.rb
events_finder.rb Enable Style/DotPosition Rubocop 👮 2017-06-21 13:48:12 +00:00
fork_projects_finder.rb Introduce ForkProjectsFinder class 2017-09-20 08:27:16 +10:00
group_descendants_finder.rb Preload ancestors for subgroups matching filter 2018-01-22 17:02:04 +01:00
group_finder.rb
group_members_finder.rb Enable Style/DotPosition Rubocop 👮 2017-06-21 13:48:12 +00:00
group_projects_finder.rb Adds Rubocop rule for line break around conditionals 2018-01-11 16:34:01 +00:00
groups_finder.rb Support custom attributes on groups 2017-11-06 10:51:50 +01:00
issuable_finder.rb Improve filtering issues by label performance 2018-01-05 13:26:30 -02:00
issues_finder.rb Use limit for search count queries 2018-01-23 22:33:42 +01:00
joined_groups_finder.rb
labels_finder.rb Remove unnecessary query from labels filter 2018-01-18 13:51:46 -02:00
members_finder.rb
merge_request_target_project_finder.rb Find branches in all projects in the fork network 2017-10-07 11:46:23 +02:00
merge_requests_finder.rb Add my_reaction_emoji param to /merge_requests API 2017-09-05 11:56:17 +09:00
milestones_finder.rb Merge branch 'milestones-finder-order-fix' into 'security-10-3' 2018-01-16 17:04:38 -08:00
move_to_project_finder.rb Removes default scope from sortable 2017-09-07 13:01:59 +01:00
notes_finder.rb Use Gitlab::SQL::Pattern where appropriate 2017-11-24 17:28:50 +01:00
personal_access_tokens_finder.rb Adds Rubocop rule for line break after guard clause 2017-11-16 17:58:29 +01:00
personal_projects_finder.rb
pipeline_schedules_finder.rb
pipelines_finder.rb
projects_finder.rb Support custom attributes on projects 2017-11-06 10:51:46 +01:00
README.md
runner_jobs_finder.rb Refactorize jobs finding logic 2017-11-28 00:36:50 +01:00
snippets_finder.rb
tags_finder.rb
todos_finder.rb Removes default scope from sortable 2017-09-07 13:01:59 +01:00
union_finder.rb
users_finder.rb Added default order to UserFinder 2017-12-04 09:49:53 +00:00

Finders

This type of classes responsible for collection items based on different conditions. To prevent lookup methods in models like this:

class Project
  def issues_for_user_filtered_by(user, filter)
    # A lot of logic not related to project model itself
  end
end

issues = project.issues_for_user_filtered_by(user, params)

Better use this:

issues = IssuesFinder.new(project, user, filter).execute

It will help keep models thiner.