|
|
@@ -72,16 +72,16 @@ class Principal < ActiveRecord::Base |
|
|
|
where({}) |
|
|
|
else |
|
|
|
pattern = "%#{sanitize_sql_like q}%" |
|
|
|
sql = +"LOWER(#{table_name}.login) LIKE LOWER(:p)" |
|
|
|
sql << " OR #{table_name}.id IN (SELECT user_id FROM #{EmailAddress.table_name} WHERE LOWER(address) LIKE LOWER(:p))" |
|
|
|
params = {:p => pattern} |
|
|
|
sql = +"LOWER(#{table_name}.login) LIKE LOWER(:p) ESCAPE :s" |
|
|
|
sql << " OR #{table_name}.id IN (SELECT user_id FROM #{EmailAddress.table_name} WHERE LOWER(address) LIKE LOWER(:p) ESCAPE :s)" |
|
|
|
params = {:p => pattern, :s => '\\'} |
|
|
|
|
|
|
|
tokens = q.split(/\s+/).reject(&:blank?).map {|token| "%#{sanitize_sql_like token}%"} |
|
|
|
if tokens.present? |
|
|
|
sql << ' OR (' |
|
|
|
sql << tokens.map.with_index do |token, index| |
|
|
|
params[:"token_#{index}"] = token |
|
|
|
"(LOWER(#{table_name}.firstname) LIKE LOWER(:token_#{index}) OR LOWER(#{table_name}.lastname) LIKE LOWER(:token_#{index}))" |
|
|
|
"(LOWER(#{table_name}.firstname) LIKE LOWER(:token_#{index}) ESCAPE :s OR LOWER(#{table_name}.lastname) LIKE LOWER(:token_#{index}) ESCAPE :s)" |
|
|
|
end.join(' AND ') |
|
|
|
sql << ')' |
|
|
|
end |