summaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
authorMarius Mathiesen <marius@shortcut.no>2009-12-14 14:12:01 +0100
committerMarius Mathiesen <marius@shortcut.no>2009-12-14 15:15:35 +0100
commit8eef9e3d5dea455e41a702909d8c54b21d7cd37a (patch)
tree5b4aff511cffdd5db4bff43dcac2adc616aabe60 /app/models
parent7a97031db4937d3f2664062152ac6dfc5254ba1d (diff)
downloadgitorious-mainline-outdated-8eef9e3d5dea455e41a702909d8c54b21d7cd37a.zip
gitorious-mainline-outdated-8eef9e3d5dea455e41a702909d8c54b21d7cd37a.tar.gz
gitorious-mainline-outdated-8eef9e3d5dea455e41a702909d8c54b21d7cd37a.tar.bz2
Perform Repository#search_clones in SQL instead of Ruby
Diffstat (limited to 'app/models')
-rw-r--r--app/models/repository.rb18
1 files changed, 17 insertions, 1 deletions
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 079609a..7d68449 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -670,7 +670,23 @@ class Repository < ActiveRecord::Base
end
def search_clones(term)
- clones.find_all { |r| r.matches_regexp?(term)}
+ sql = "SELECT repositories.* FROM repositories
+ INNER JOIN users on repositories.user_id=users.id
+ INNER JOIN groups on repositories.owner_id=groups.id
+ WHERE repositories.parent_id=:id
+ AND (repositories.name LIKE :q OR repositories.description LIKE :q OR groups.name LIKE :q)
+ AND repositories.owner_type='Group'
+ AND kind in (:kinds)
+ UNION ALL
+ SELECT repositories.* from repositories
+ INNER JOIN users on repositories.user_id=users.id
+ INNER JOIN users owners on repositories.owner_id=owners.id
+ WHERE repositories.parent_id=:id
+ AND (repositories.name LIKE :q OR repositories.description LIKE :q OR owners.login LIKE :q)
+ AND repositories.owner_type='User'
+ AND kind in (:kinds)"
+ clones.find_by_sql([sql, {:q => "%#{term}%", :id => id, :kinds =>
+ [KIND_TEAM_REPO, KIND_USER_REPO, KIND_PROJECT_REPO]}])
end
protected