Fixed: case sensitivity in issue subject filtering (#3536).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2796 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2009-06-28 12:12:27 +00:00
parent aa07e8505e
commit a7bb63a182
2 changed files with 9 additions and 7 deletions

View File

@ -424,9 +424,9 @@ class Query < ActiveRecord::Base
Time.now.at_beginning_of_week Time.now.at_beginning_of_week
sql = "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(from), connection.quoted_date(from + 7.days)] sql = "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(from), connection.quoted_date(from + 7.days)]
when "~" when "~"
sql = "#{db_table}.#{db_field} LIKE '%#{connection.quote_string(value.first)}%'" sql = "LOWER(#{db_table}.#{db_field}) LIKE '%#{connection.quote_string(value.first.to_s.downcase)}%'"
when "!~" when "!~"
sql = "#{db_table}.#{db_field} NOT LIKE '%#{connection.quote_string(value.first)}%'" sql = "LOWER(#{db_table}.#{db_field}) NOT LIKE '%#{connection.quote_string(value.first.to_s.downcase)}%'"
end end
return sql return sql

View File

@ -150,15 +150,17 @@ class QueryTest < Test::Unit::TestCase
def test_operator_contains def test_operator_contains
query = Query.new(:project => Project.find(1), :name => '_') query = Query.new(:project => Project.find(1), :name => '_')
query.add_filter('subject', '~', ['string']) query.add_filter('subject', '~', ['uNable'])
assert query.statement.include?("#{Issue.table_name}.subject LIKE '%string%'") assert query.statement.include?("LOWER(#{Issue.table_name}.subject) LIKE '%unable%'")
find_issues_with_query(query) result = find_issues_with_query(query)
assert result.empty?
result.each {|issue| assert issue.subject.downcase.include?('unable') }
end end
def test_operator_does_not_contains def test_operator_does_not_contains
query = Query.new(:project => Project.find(1), :name => '_') query = Query.new(:project => Project.find(1), :name => '_')
query.add_filter('subject', '!~', ['string']) query.add_filter('subject', '!~', ['uNable'])
assert query.statement.include?("#{Issue.table_name}.subject NOT LIKE '%string%'") assert query.statement.include?("LOWER(#{Issue.table_name}.subject) NOT LIKE '%unable%'")
find_issues_with_query(query) find_issues_with_query(query)
end end