Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api/entities/project_with_access.rb')
-rw-r--r--lib/api/entities/project_with_access.rb36
1 files changed, 27 insertions, 9 deletions
diff --git a/lib/api/entities/project_with_access.rb b/lib/api/entities/project_with_access.rb
index b541ccbadcf..9722b8806d4 100644
--- a/lib/api/entities/project_with_access.rb
+++ b/lib/api/entities/project_with_access.rb
@@ -25,23 +25,41 @@ module API
# rubocop: disable CodeReuse/ActiveRecord
def self.preload_relation(projects_relation, options = {})
- relation = super(projects_relation, options)
- # use reselect to override the existing select and
- # prevent an error `subquery has too many columns`
- project_ids = relation.reselect('projects.id')
- namespace_ids = relation.reselect(:namespace_id)
+ if ::Feature.enabled?(:projects_preloader_fix)
+ super(projects_relation, options)
+ else
+ relation = super(projects_relation, options)
+ # use reselect to override the existing select and
+ # prevent an error `subquery has too many columns`
+ project_ids = relation.reselect('projects.id')
+ namespace_ids = relation.reselect(:namespace_id)
+
+ options[:project_members] = options[:current_user]
+ .project_members
+ .where(source_id: project_ids)
+ .preload(:source, user: [notification_settings: :source])
+
+ options[:group_members] = options[:current_user]
+ .group_members
+ .where(source_id: namespace_ids)
+ .preload(:source, user: [notification_settings: :source])
+
+ relation
+ end
+ end
+
+ def self.postload_relation(projects_relation, options = {})
+ return unless ::Feature.enabled?(:projects_preloader_fix)
options[:project_members] = options[:current_user]
.project_members
- .where(source_id: project_ids)
+ .where(source_id: projects_relation.subquery(:id))
.preload(:source, user: [notification_settings: :source])
options[:group_members] = options[:current_user]
.group_members
- .where(source_id: namespace_ids)
+ .where(source_id: projects_relation.subquery(:namespace_id))
.preload(:source, user: [notification_settings: :source])
-
- relation
end
# rubocop: enable CodeReuse/ActiveRecord
end