Improves User#owned_projects query performance
This commit is contained in:
parent
40c338a4bb
commit
5f22dbdb3a
2 changed files with 15 additions and 3 deletions
|
@ -623,9 +623,7 @@ class User < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def owned_projects
|
||||
@owned_projects ||=
|
||||
Project.where('namespace_id IN (?) OR namespace_id = ?',
|
||||
owned_groups.select(:id), namespace.id).joins(:namespace)
|
||||
@owned_projects ||= Project.from("(#{owned_projects_union.to_sql}) AS projects")
|
||||
end
|
||||
|
||||
# Returns projects which user can admin issues on (for example to move an issue to that project).
|
||||
|
@ -1196,6 +1194,15 @@ class User < ActiveRecord::Base
|
|||
|
||||
private
|
||||
|
||||
def owned_projects_union
|
||||
Gitlab::SQL::Union.new([
|
||||
Project.where(namespace: namespace),
|
||||
Project.joins(:project_authorizations)
|
||||
.where("projects.namespace_id <> ?", namespace.id)
|
||||
.where(project_authorizations: { user_id: id, access_level: Gitlab::Access::OWNER })
|
||||
], remove_duplicates: false)
|
||||
end
|
||||
|
||||
def ci_projects_union
|
||||
scope = { access_level: [Gitlab::Access::MASTER, Gitlab::Access::OWNER] }
|
||||
groups = groups_projects.where(members: scope)
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Improves the performance of projects list page
|
||||
merge_request: 17934
|
||||
author:
|
||||
type: performance
|
Loading…
Reference in a new issue