]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4140 fix performance of /api/batch_bootstrap/properties
authorSimon Brandhof <simon.brandhof@gmail.com>
Wed, 20 Feb 2013 09:21:57 +0000 (10:21 +0100)
committerSimon Brandhof <simon.brandhof@gmail.com>
Wed, 20 Feb 2013 09:21:57 +0000 (10:21 +0100)
sonar-server/src/main/webapp/WEB-INF/app/controllers/batch_bootstrap_controller.rb

index 9c2055bbffe9867977b659b88d87c13193244fb8..52d1c8c134bb5cf39bee8ab41494fe49fe7c54b1 100644 (file)
@@ -36,8 +36,13 @@ class BatchBootstrapController < Api::ApiController
 
     root_project = load_project()
     if root_project
-      Project.find(:all, :select => 'id,kee', :conditions => ['enabled=? and (root_id=? or id=?)', true, root_project.id, root_project.id]).each do |project|
-        json_properties.concat(Property.find(:all, :conditions => ['user_id is null and resource_id=?', project.id]).map { |property| to_json_property(property, project.kee) })
+      properties = Property.find(:all, :conditions => ["user_id is null and resource_id in (select id from projects where enabled=? and (root_id=? or id=?))", true, root_project.id, root_project.id])
+      resource_ids = properties.map{|p| p.resource_id}.uniq.compact
+      unless resource_ids.empty?
+        resource_key_by_id = Project.find(:all, :select => 'id,kee', :conditions => {:id => resource_ids}).inject({}) {|hash, resource| hash[resource.id]=resource.key; hash}
+        properties.each do |property|
+          json_properties << to_json_property(property, resource_key_by_id[property.resource_id])
+        end
       end
     end