mirror of
https://github.com/redmine/redmine.git
synced 2025-11-10 23:36:01 +01:00
Don't use #downcase on search tokens, let the database handle it (#18537).
git-svn-id: http://svn.redmine.org/redmine/trunk@13754 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
<h2><%= l(:label_home) %></h2>
|
<h2><%= l(:label_home) %></h2>
|
||||||
|
|
||||||
|
<%= "Ö".downcase %>
|
||||||
|
|
||||||
<div class="splitcontentleft">
|
<div class="splitcontentleft">
|
||||||
<%= textilizable Setting.welcome_text %>
|
<%= textilizable Setting.welcome_text %>
|
||||||
<% if @news.any? %>
|
<% if @news.any? %>
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ module Redmine
|
|||||||
columns = searchable_options[:columns]
|
columns = searchable_options[:columns]
|
||||||
columns = columns[0..0] if options[:titles_only]
|
columns = columns[0..0] if options[:titles_only]
|
||||||
|
|
||||||
token_clauses = columns.collect {|column| "(LOWER(#{column}) LIKE ?)"}
|
token_clauses = columns.collect {|column| "(LOWER(#{column}) LIKE LOWER(?))"}
|
||||||
|
|
||||||
if !options[:titles_only] && searchable_options[:search_custom_fields]
|
if !options[:titles_only] && searchable_options[:search_custom_fields]
|
||||||
searchable_custom_fields = CustomField.where(:type => "#{self.name}CustomField", :searchable => true)
|
searchable_custom_fields = CustomField.where(:type => "#{self.name}CustomField", :searchable => true)
|
||||||
@@ -97,7 +97,7 @@ module Redmine
|
|||||||
fields_by_visibility.each do |visibility, fields|
|
fields_by_visibility.each do |visibility, fields|
|
||||||
ids = fields.map(&:id).join(',')
|
ids = fields.map(&:id).join(',')
|
||||||
sql = "#{table_name}.id IN (SELECT cfs.customized_id FROM #{CustomValue.table_name} cfs" +
|
sql = "#{table_name}.id IN (SELECT cfs.customized_id FROM #{CustomValue.table_name} cfs" +
|
||||||
" WHERE cfs.customized_type='#{self.name}' AND cfs.customized_id=#{table_name}.id AND LOWER(cfs.value) LIKE ?" +
|
" WHERE cfs.customized_type='#{self.name}' AND cfs.customized_id=#{table_name}.id AND LOWER(cfs.value) LIKE LOWER(?)" +
|
||||||
" AND cfs.custom_field_id IN (#{ids})" +
|
" AND cfs.custom_field_id IN (#{ids})" +
|
||||||
" AND #{visibility})"
|
" AND #{visibility})"
|
||||||
token_clauses << sql
|
token_clauses << sql
|
||||||
@@ -106,7 +106,7 @@ module Redmine
|
|||||||
|
|
||||||
sql = (['(' + token_clauses.join(' OR ') + ')'] * tokens.size).join(options[:all_words] ? ' AND ' : ' OR ')
|
sql = (['(' + token_clauses.join(' OR ') + ')'] * tokens.size).join(options[:all_words] ? ' AND ' : ' OR ')
|
||||||
|
|
||||||
tokens_conditions = [sql, * (tokens.collect {|w| "%#{w.downcase}%"} * token_clauses.size).sort]
|
tokens_conditions = [sql, * (tokens.collect {|w| "%#{w}%"} * token_clauses.size).sort]
|
||||||
|
|
||||||
scope = (searchable_options[:scope] || self)
|
scope = (searchable_options[:scope] || self)
|
||||||
if scope.is_a? Proc
|
if scope.is_a? Proc
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# encoding: utf-8
|
||||||
|
#
|
||||||
# Redmine - project management software
|
# Redmine - project management software
|
||||||
# Copyright (C) 2006-2014 Jean-Philippe Lang
|
# Copyright (C) 2006-2014 Jean-Philippe Lang
|
||||||
#
|
#
|
||||||
@@ -137,6 +139,13 @@ class SearchTest < ActiveSupport::TestCase
|
|||||||
assert_equal issue, r.first
|
assert_equal issue, r.first
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_search_should_not_use_ruby_downcase
|
||||||
|
issue = Issue.generate!(:subject => "Special chars: ÖÖ")
|
||||||
|
r = Issue.search_results('%ÖÖ%')
|
||||||
|
assert_equal 1, r.size
|
||||||
|
assert_equal issue, r.first
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def remove_permission(role, permission)
|
def remove_permission(role, permission)
|
||||||
|
|||||||
Reference in New Issue
Block a user