summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2018-08-13 12:09:43 +0000
committerYorick Peterse <yorickpeterse@gmail.com>2018-08-13 12:09:43 +0000
commit1053af15a4ddab5066ca524a7a1f400df1c93bb8 (patch)
tree162f92e34e0a786e59461c6634dc2c0e8beeead5
parent3dd44f2b5355b080b4dc77dce97466e6a70b9e24 (diff)
parent847c698b39b9030b6d693ad5eee31e97d520d27d (diff)
downloadgitlab-ce-1053af15a4ddab5066ca524a7a1f400df1c93bb8.tar.gz
Merge branch 'ce-5666-optimize_querying_manageable_groups' into 'master'
Optimize querying User#manageable_groups See merge request gitlab-org/gitlab-ce!21050
-rw-r--r--app/models/user.rb19
-rw-r--r--changelogs/unreleased/ce-5666-optimize_querying_manageable_groups.yml5
2 files changed, 10 insertions, 14 deletions
diff --git a/app/models/user.rb b/app/models/user.rb
index 37f2e8b680e..fb19de4b980 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -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
diff --git a/changelogs/unreleased/ce-5666-optimize_querying_manageable_groups.yml b/changelogs/unreleased/ce-5666-optimize_querying_manageable_groups.yml
new file mode 100644
index 00000000000..0c6a1071cdd
--- /dev/null
+++ b/changelogs/unreleased/ce-5666-optimize_querying_manageable_groups.yml
@@ -0,0 +1,5 @@
+---
+title: Optimize querying User#manageable_groups
+merge_request: 21050
+author:
+type: performance