From: Jean-Philippe Lang Date: Mon, 28 Mar 2011 20:29:43 +0000 (+0000) Subject: Save 1 query + 1 cache hit in #shared_versions for root projects. X-Git-Tag: 1.2.0~602 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=1c03b418e193638205a17b95e056844b74f22b0e;p=redmine.git Save 1 query + 1 cache hit in #shared_versions for root projects. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5243 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/project.rb b/app/models/project.rb index ccb411482..0953d786f 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -379,15 +379,17 @@ class Project < ActiveRecord::Base # Returns a scope of the Versions used by the project def shared_versions - @shared_versions ||= + @shared_versions ||= begin + r = root? ? self : root Version.scoped(:include => :project, :conditions => "#{Project.table_name}.id = #{id}" + " OR (#{Project.table_name}.status = #{Project::STATUS_ACTIVE} AND (" + " #{Version.table_name}.sharing = 'system'" + - " OR (#{Project.table_name}.lft >= #{root.lft} AND #{Project.table_name}.rgt <= #{root.rgt} AND #{Version.table_name}.sharing = 'tree')" + + " OR (#{Project.table_name}.lft >= #{r.lft} AND #{Project.table_name}.rgt <= #{r.rgt} AND #{Version.table_name}.sharing = 'tree')" + " OR (#{Project.table_name}.lft < #{lft} AND #{Project.table_name}.rgt > #{rgt} AND #{Version.table_name}.sharing IN ('hierarchy', 'descendants'))" + " OR (#{Project.table_name}.lft > #{lft} AND #{Project.table_name}.rgt < #{rgt} AND #{Version.table_name}.sharing = 'hierarchy')" + "))") + end end # Returns a hash of project users grouped by role