summaryrefslogtreecommitdiffstats
path: root/app/models/project.rb
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2011-03-28 20:29:43 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2011-03-28 20:29:43 +0000
commit1c03b418e193638205a17b95e056844b74f22b0e (patch)
tree8179e172b3f6bb516503643b9bcd5d805db921c1 /app/models/project.rb
parent2d3f69f8b1c099ecb1d219692c14b063230e2836 (diff)
downloadredmine-1c03b418e193638205a17b95e056844b74f22b0e.tar.gz
redmine-1c03b418e193638205a17b95e056844b74f22b0e.zip
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
Diffstat (limited to 'app/models/project.rb')
-rw-r--r--app/models/project.rb6
1 files changed, 4 insertions, 2 deletions
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