... @@ -2,6 +2,8 @@
... @@ -2,6 +2,8 @@
module Gitlab
module Gitlab
class SearchResults
class SearchResults
COUNT_LIMIT = 1001
attr_reader :current_user , :query , :per_page
attr_reader :current_user , :query , :per_page
# Limit search results by passed projects
# Limit search results by passed projects
... @@ -25,29 +27,26 @@ module Gitlab
... @@ -25,29 +27,26 @@ module Gitlab
def objects ( scope , page = nil , without_count = true )
def objects ( scope , page = nil , without_count = true )
collection = case scope
collection = case scope
when 'projects'
when 'projects'
projects . page ( page ). per ( per_page )
projects
when 'issues'
when 'issues'
issues . page ( page ). per ( per_page )
issues
when 'merge_requests'
when 'merge_requests'
merge_requests . page ( page ). per ( per_page )
merge_requests
when 'milestones'
when 'milestones'
milestones . page ( page ). per ( per_page )
milestones
when 'users'
when 'users'
users . page ( page ). per ( per_page )
users
else
else
Kaminari . paginate_array ([]). page ( page ). per ( per_page )
Kaminari . paginate_array ([])
end
end . page ( page ). per ( per_page )
without_count ? collection . without_count : collection
without_count ? collection . without_count : collection
end
end
# rubocop: disable CodeReuse/ActiveRecord
def limited_projects_count
def limited_projects_count
@limited_projects_count ||= projects . limit ( count_limit ). count
@limited_projects_count ||= limited_ count ( projects )
end
end
# rubocop: enable CodeReuse/ActiveRecord
# rubocop: disable CodeReuse/ActiveRecord
def limited_issues_count
def limited_issues_count
return @limited_issues_count if @limited_issues_count
return @limited_issues_count if @limited_issues_count
... @@ -56,35 +55,28 @@ module Gitlab
... @@ -56,35 +55,28 @@ module Gitlab
# and confidential issues user has access to, is too complex.
# and confidential issues user has access to, is too complex.
# It's faster to try to fetch all public issues first, then only
# It's faster to try to fetch all public issues first, then only
# if necessary try to fetch all issues.
# if necessary try to fetch all issues.
sum = issues ( public_only: true ). limit ( count_limit ). count
sum = limited_count ( issues ( public_only: true ))
@limited_issues_count = sum < count_limit ? issues . limit ( count_limit ). count : sum
@limited_issues_count = sum < count_limit ? limited_ count ( issues ) : sum
end
end
# rubocop: enable CodeReuse/ActiveRecord
# rubocop: disable CodeReuse/ActiveRecord
def limited_merge_requests_count
def limited_merge_requests_count
@limited_merge_requests_count ||= merge_requests . limit ( count_limit ). count
@limited_merge_requests_count ||= limited_count ( merge_requests )
end
end
# rubocop: enable CodeReuse/ActiveRecord
# rubocop: disable CodeReuse/ActiveRecord
def limited_milestones_count
def limited_milestones_count
@limited_milestones_count ||= milestones . limit ( count_limit ). count
@limited_milestones_count ||= limited_ count ( milestones )
end
end
# rubocop: enable CodeReuse/ActiveRecord
# rubocop:disable CodeReuse/ActiveRecord
def limited_users_count
def limited_users_count
@limited_users_count ||= users . limit ( count_limit ). count
@limited_users_count ||= limited_count ( users )
end
end
# rubocop:enable CodeReuse/ActiveRecord
def single_commit_result?
def single_commit_result?
false
false
end
end
def count_limit
def count_limit
1001
COUNT_LIMIT
end
end
def users
def users
... @@ -99,23 +91,15 @@ module Gitlab
... @@ -99,23 +91,15 @@ module Gitlab
limit_projects . search ( query )
limit_projects . search ( query )
end
end
# rubocop: disable CodeReuse/ActiveRecord
def issues ( finder_params = {})
def issues ( finder_params = {})
issues = IssuesFinder . new ( current_user , finder_params ). execute
issues = IssuesFinder . new ( current_user , issuable_params . merge ( finder_params )). execute
unless default_project_filter
issues = issues . where ( project_id: project_ids_relation )
end
issues =
unless default_project_filter
if query =~ /#(\d+)\z/
issues = issues . where ( project_id: project_ids_relation ) # rubocop: disable CodeReuse/ActiveRecord
issues . where ( iid: $1 )
else
issues . full_search ( query )
end
end
issues . reorder ( 'updated_at DESC' )
issues
end
end
# rubocop: enable CodeReuse/ActiveRecord
# rubocop: disable CodeReuse/ActiveRecord
# rubocop: disable CodeReuse/ActiveRecord
def milestones
def milestones
... @@ -127,24 +111,16 @@ module Gitlab
... @@ -127,24 +111,16 @@ module Gitlab
end
end
# rubocop: enable CodeReuse/ActiveRecord
# rubocop: enable CodeReuse/ActiveRecord
# rubocop: disable CodeReuse/ActiveRecord
def merge_requests
def merge_requests
merge_requests = MergeRequestsFinder . new ( current_user ). execute
merge_requests = MergeRequestsFinder . new ( current_user , issuable_params ). execute
unless default_project_filter
unless default_project_filter
merge_requests = merge_requests . in_projects ( project_ids_relation )
merge_requests = merge_requests . in_projects ( project_ids_relation )
end
end
merge_requests =
merge_requests
if query =~ /[#!](\d+)\z/
merge_requests . where ( iid: $1 )
else
merge_requests . full_search ( query )
end
end
merge_requests . reorder ( 'updated_at DESC' )
end
# rubocop: enable CodeReuse/ActiveRecord
def default_scope
def default_scope
'projects'
'projects'
end
end
... @@ -174,5 +150,23 @@ module Gitlab
... @@ -174,5 +150,23 @@ module Gitlab
limit_projects . select ( :id ). reorder ( nil )
limit_projects . select ( :id ). reorder ( nil )
end
end
# rubocop: enable CodeReuse/ActiveRecord
# rubocop: enable CodeReuse/ActiveRecord
def issuable_params
{}. tap do | params |
params [ :sort ] = 'updated_desc'
if query =~ /#(\d+)\z/
params [ :iids ] = $1
else
params [ :search ] = query
end
end
end
# rubocop: disable CodeReuse/ActiveRecord
def limited_count ( relation )
relation . reorder ( nil ). limit ( count_limit ). size
end
# rubocop: enable CodeReuse/ActiveRecord
end
end
end
end