From 84d92fb2d88778d8a95d17954368350007541593 Mon Sep 17 00:00:00 2001 From: Jan Schulz-Hofen Date: Wed, 29 Jun 2016 14:33:49 +0200 Subject: [PATCH] Eliminate subselect in Project.allowed_to_condition in order to increase performance --- app/models/project.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index c48c548..d072047 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -181,7 +181,12 @@ class Project < ActiveRecord::Base base_statement = (perm && perm.read? ? "#{Project.table_name}.status <> #{Project::STATUS_ARCHIVED}" : "#{Project.table_name}.status = #{Project::STATUS_ACTIVE}") if perm && perm.project_module # If the permission belongs to a project module, make sure the module is enabled - base_statement << " AND #{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name='#{perm.project_module}')" + project_ids_with_module_enabled = EnabledModule.where(name: perm.project_module).pluck(:project_id) + if project_ids_with_module_enabled.present? + base_statement << " AND #{Project.table_name}.id IN (#{project_ids_with_module_enabled.join ','})" + else + base_statement << " AND 1=0" + end end if project = options[:project] project_statement = project.project_condition(options[:with_subprojects]) -- 2.7.2