gitlab-org--gitlab-foss/app/services/search/global_service.rb
Jan Provaznik d2f1d585e1 Skip projects filter on merge requests search
When searching for merge requests, an additional subquery
is added which by default filters only merge requests which belong
to source or target project user has permission for.

This filter is not needed because more restrictive filter
which checks if user has permission for target project
is used in the query.

So unless a custom projects filter is used by user, it's possible
to skip the default projects filter and speed up the final query.

Related to #40540
2017-12-21 15:43:14 +01:00

28 lines
713 B
Ruby

module Search
class GlobalService
attr_accessor :current_user, :params
attr_reader :default_project_filter
def initialize(user, params)
@current_user, @params = user, params.dup
@default_project_filter = true
end
def execute
Gitlab::SearchResults.new(current_user, projects, params[:search],
default_project_filter: default_project_filter)
end
def projects
@projects ||= ProjectsFinder.new(current_user: current_user).execute
end
def scope
@scope ||= begin
allowed_scopes = %w[issues merge_requests milestones]
allowed_scopes.delete(params[:scope]) { 'projects' }
end
end
end
end