diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2016-03-01 16:59:36 +0100 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2016-03-11 15:25:21 -0500 |
commit | 87e7c3e1321ac5ae26d6a23d7b16e8dadaff98d2 (patch) | |
tree | a834e8ae5c90e77f5d4206b8a05abc40c49ceaf7 /app | |
parent | 2076bdb62e6535cd8b5027c5636610eb06af00a0 (diff) | |
download | gitlab-ce-87e7c3e1321ac5ae26d6a23d7b16e8dadaff98d2.tar.gz |
Use ILIKE/LIKE for Issuable.search and full_search
Diffstat (limited to 'app')
-rw-r--r-- | app/models/concerns/issuable.rb | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index 27b97944e38..3c42f582937 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -61,12 +61,29 @@ module Issuable end module ClassMethods + # Searches for records with a matching title. + # + # This method uses ILIKE on PostgreSQL and LIKE on MySQL. + # + # query - The search query as a String + # + # Returns an ActiveRecord::Relation. def search(query) - where("LOWER(title) like :query", query: "%#{query.downcase}%") + where(arel_table[:title].matches("%#{query}%")) end + # Searches for records with a matching title or description. + # + # This method uses ILIKE on PostgreSQL and LIKE on MySQL. + # + # query - The search query as a String + # + # Returns an ActiveRecord::Relation. def full_search(query) - where("LOWER(title) like :query OR LOWER(description) like :query", query: "%#{query.downcase}%") + t = arel_table + pattern = "%#{query}%" + + where(t[:title].matches(pattern).or(t[:description].matches(pattern))) end def sort(method) |