Merge branch 'ce-5666-optimize_querying_manageable_groups' into 'master'
Optimize querying User#manageable_groups See merge request gitlab-org/gitlab-ce!21050
This commit is contained in:
commit
1053af15a4
2 changed files with 10 additions and 14 deletions
|
@ -101,6 +101,10 @@ class User < ActiveRecord::Base
|
|||
has_many :groups, through: :group_members
|
||||
has_many :owned_groups, -> { where(members: { access_level: Gitlab::Access::OWNER }) }, through: :group_members, source: :group
|
||||
has_many :maintainers_groups, -> { where(members: { access_level: Gitlab::Access::MAINTAINER }) }, through: :group_members, source: :group
|
||||
has_many :owned_or_maintainers_groups,
|
||||
-> { where(members: { access_level: [Gitlab::Access::MAINTAINER, Gitlab::Access::OWNER] }) },
|
||||
through: :group_members,
|
||||
source: :group
|
||||
alias_attribute :masters_groups, :maintainers_groups
|
||||
|
||||
# Projects
|
||||
|
@ -982,15 +986,7 @@ class User < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def manageable_groups
|
||||
union_sql = Gitlab::SQL::Union.new([owned_groups.select(:id), maintainers_groups.select(:id)]).to_sql
|
||||
|
||||
# Update this line to not use raw SQL when migrated to Rails 5.2.
|
||||
# Either ActiveRecord or Arel constructions are fine.
|
||||
# This was replaced with the raw SQL construction because of bugs in the arel gem.
|
||||
# Bugs were fixed in arel 9.0.0 (Rails 5.2).
|
||||
owned_and_maintainer_groups = Group.where("namespaces.id IN (#{union_sql})") # rubocop:disable GitlabSecurity/SqlInjection
|
||||
|
||||
Gitlab::GroupHierarchy.new(owned_and_maintainer_groups).base_and_descendants
|
||||
Gitlab::GroupHierarchy.new(owned_or_maintainers_groups).base_and_descendants
|
||||
end
|
||||
|
||||
def namespaces
|
||||
|
@ -1244,11 +1240,6 @@ class User < ActiveRecord::Base
|
|||
!terms_accepted?
|
||||
end
|
||||
|
||||
def owned_or_maintainers_groups
|
||||
union = Gitlab::SQL::Union.new([owned_groups, maintainers_groups])
|
||||
Group.from("(#{union.to_sql}) namespaces")
|
||||
end
|
||||
|
||||
# @deprecated
|
||||
alias_method :owned_or_masters_groups, :owned_or_maintainers_groups
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Optimize querying User#manageable_groups
|
||||
merge_request: 21050
|
||||
author:
|
||||
type: performance
|
Loading…
Reference in a new issue