mirror of
https://github.com/redmine/redmine.git
synced 2025-11-15 17:56:03 +01:00
SQL server: non ASCII filter on text fields does not work (#22405).
git-svn-id: http://svn.redmine.org/redmine/trunk@15353 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -783,7 +783,7 @@ class Query < ActiveRecord::Base
|
|||||||
sql = "#{db_table}.#{db_field} BETWEEN #{value.first.to_f - 1e-5} AND #{value.first.to_f + 1e-5}"
|
sql = "#{db_table}.#{db_field} BETWEEN #{value.first.to_f - 1e-5} AND #{value.first.to_f + 1e-5}"
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
sql = "#{db_table}.#{db_field} IN (" + value.collect{|val| "'#{self.class.connection.quote_string(val)}'"}.join(",") + ")"
|
sql = queried_class.send(:sanitize_sql_for_conditions, ["#{db_table}.#{db_field} IN (?)", value])
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
# IN an empty set
|
# IN an empty set
|
||||||
@@ -791,7 +791,7 @@ class Query < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
when "!"
|
when "!"
|
||||||
if value.any?
|
if value.any?
|
||||||
sql = "(#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} NOT IN (" + value.collect{|val| "'#{self.class.connection.quote_string(val)}'"}.join(",") + "))"
|
sql = queried_class.send(:sanitize_sql_for_conditions, ["(#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} NOT IN (?))", value])
|
||||||
else
|
else
|
||||||
# NOT IN an empty set
|
# NOT IN an empty set
|
||||||
sql = "1=1"
|
sql = "1=1"
|
||||||
|
|||||||
@@ -144,15 +144,14 @@ class QueryTest < ActiveSupport::TestCase
|
|||||||
def test_query_should_allow_shared_versions_for_a_project_query
|
def test_query_should_allow_shared_versions_for_a_project_query
|
||||||
subproject_version = Version.find(4)
|
subproject_version = Version.find(4)
|
||||||
query = IssueQuery.new(:project => Project.find(1), :name => '_')
|
query = IssueQuery.new(:project => Project.find(1), :name => '_')
|
||||||
query.add_filter('fixed_version_id', '=', [subproject_version.id.to_s])
|
filter = query.available_filters["fixed_version_id"]
|
||||||
|
assert_not_nil filter
|
||||||
assert query.statement.include?("#{Issue.table_name}.fixed_version_id IN ('4')")
|
assert_include subproject_version.id.to_s, filter[:values].map(&:last)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_query_with_multiple_custom_fields
|
def test_query_with_multiple_custom_fields
|
||||||
query = IssueQuery.find(1)
|
query = IssueQuery.find(1)
|
||||||
assert query.valid?
|
assert query.valid?
|
||||||
assert query.statement.include?("#{CustomValue.table_name}.value IN ('MySQL')")
|
|
||||||
issues = find_issues_with_query(query)
|
issues = find_issues_with_query(query)
|
||||||
assert_equal 1, issues.length
|
assert_equal 1, issues.length
|
||||||
assert_equal Issue.find(3), issues.first
|
assert_equal Issue.find(3), issues.first
|
||||||
@@ -328,6 +327,16 @@ class QueryTest < ActiveSupport::TestCase
|
|||||||
assert issues.map(&:id).include?(3)
|
assert issues.map(&:id).include?(3)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_operator_is_on_string_custom_field_with_utf8_value
|
||||||
|
f = IssueCustomField.create!(:name => 'filter', :field_format => 'string', :is_filter => true, :is_for_all => true, :trackers => Tracker.all)
|
||||||
|
CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => 'Kiểm')
|
||||||
|
|
||||||
|
query = IssueQuery.new(:name => '_')
|
||||||
|
query.add_filter("cf_#{f.id}", '=', ['Kiểm'])
|
||||||
|
issues = find_issues_with_query(query)
|
||||||
|
assert_equal [1], issues.map(&:id).sort
|
||||||
|
end
|
||||||
|
|
||||||
def test_operator_is_on_is_private_field
|
def test_operator_is_on_is_private_field
|
||||||
# is_private filter only available for those who can set issues private
|
# is_private filter only available for those who can set issues private
|
||||||
User.current = User.find(2)
|
User.current = User.find(2)
|
||||||
@@ -1585,7 +1594,6 @@ class QueryTest < ActiveSupport::TestCase
|
|||||||
setup_member_of_group
|
setup_member_of_group
|
||||||
@query.add_filter('member_of_group', '=', [@group.id.to_s])
|
@query.add_filter('member_of_group', '=', [@group.id.to_s])
|
||||||
|
|
||||||
assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IN ('#{@user_in_group.id}','#{@second_user_in_group.id}','#{@group.id}')"
|
|
||||||
assert_find_issues_with_query_is_successful @query
|
assert_find_issues_with_query_is_successful @query
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1593,8 +1601,6 @@ class QueryTest < ActiveSupport::TestCase
|
|||||||
setup_member_of_group
|
setup_member_of_group
|
||||||
@query.add_filter('member_of_group', '!*', [''])
|
@query.add_filter('member_of_group', '!*', [''])
|
||||||
|
|
||||||
# Users not in a group
|
|
||||||
assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IS NULL OR #{Issue.table_name}.assigned_to_id NOT IN ('#{@user_in_group.id}','#{@second_user_in_group.id}','#{@user_in_group2.id}','#{@group.id}','#{@group2.id}')"
|
|
||||||
assert_find_issues_with_query_is_successful @query
|
assert_find_issues_with_query_is_successful @query
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1602,8 +1608,6 @@ class QueryTest < ActiveSupport::TestCase
|
|||||||
setup_member_of_group
|
setup_member_of_group
|
||||||
@query.add_filter('member_of_group', '*', [''])
|
@query.add_filter('member_of_group', '*', [''])
|
||||||
|
|
||||||
# Only users in a group
|
|
||||||
assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IN ('#{@user_in_group.id}','#{@second_user_in_group.id}','#{@user_in_group2.id}','#{@group.id}','#{@group2.id}')"
|
|
||||||
assert_find_issues_with_query_is_successful @query
|
assert_find_issues_with_query_is_successful @query
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user