Skip to content
Snippets Groups Projects

Improve performance of the global search for issuables

All threads resolved!
Compare and Show latest version
4 files
+ 16
18
Compare changes
  • Side-by-side
  • Inline
Files
4
@@ -199,7 +199,7 @@ def projects
@@ -199,7 +199,7 @@ def projects
find_projects
find_projects
end
end
@projects = projects.with_feature_available_for_user(klass, current_user)
@projects = projects.with_feature_available_for_user(klass, current_user).reorder(nil) # rubocop: disable CodeReuse/ActiveRecord
end
end
def find_group_projects
def find_group_projects
@@ -212,8 +212,7 @@ def find_group_projects
@@ -212,8 +212,7 @@ def find_group_projects
end
end
def find_projects
def find_projects
ProjectsFinder.new(current_user: current_user, # rubocop: disable CodeReuse/Finder
Project.public_or_visible_to_user(current_user, min_access_level)
params: { public_or_min_access_level: min_access_level }).execute
end
end
def search
def search
@@ -329,8 +328,7 @@ def use_cte_for_search?
@@ -329,8 +328,7 @@ def use_cte_for_search?
# Only simple unsorted & simple sorts can use CTE
# Only simple unsorted & simple sorts can use CTE
next false if params[:sort].present? && !params[:sort].in?(klass.simple_sorts.keys)
next false if params[:sort].present? && !params[:sort].in?(klass.simple_sorts.keys)
attempt_group_search_optimizations? ||
attempt_group_search_optimizations? || attempt_project_search_optimizations?
attempt_project_search_optimizations?
end
end
end
end
@@ -427,8 +425,9 @@ def by_project(items)
@@ -427,8 +425,9 @@ def by_project(items)
# rubocop: disable CodeReuse/ActiveRecord
# rubocop: disable CodeReuse/ActiveRecord
def by_search(items)
def by_search(items)
return items unless search
return items unless search
 
return items if items == Issue.none
if use_cte_for_search? && items != ApplicationRecord.none
if use_cte_for_search?
cte = Gitlab::SQL::RecursiveCTE.new(klass.table_name)
cte = Gitlab::SQL::RecursiveCTE.new(klass.table_name)
cte << items
cte << items
Loading