diff options
author | Marius Mathiesen <marius@shortcut.no> | 2009-12-14 14:12:01 +0100 |
---|---|---|
committer | Marius Mathiesen <marius@shortcut.no> | 2009-12-14 15:15:35 +0100 |
commit | 8eef9e3d5dea455e41a702909d8c54b21d7cd37a (patch) | |
tree | 5b4aff511cffdd5db4bff43dcac2adc616aabe60 /app/models | |
parent | 7a97031db4937d3f2664062152ac6dfc5254ba1d (diff) | |
download | gitorious-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.rb | 18 |
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 |