diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2017-03-07 17:51:27 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2017-03-07 17:51:27 +0000 |
commit | 58ee62e23990799f1c6d733e1a9a7f046d004816 (patch) | |
tree | 3ccecb90e8dee903a424a96fdfc14f5a75898447 | |
parent | 29ad5b31e0721cb0194ef019289dba265e116f45 (diff) | |
download | redmine-58ee62e23990799f1c6d733e1a9a7f046d004816.tar.gz redmine-58ee62e23990799f1c6d733e1a9a7f046d004816.zip |
Issue description filter's 'none' operator does not match issues with blank descriptions (#25077).
Patch by Marius BALTEANU.
git-svn-id: http://svn.redmine.org/redmine/trunk@16378 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | app/models/query.rb | 4 | ||||
-rw-r--r-- | test/unit/query_test.rb | 12 |
2 files changed, 14 insertions, 2 deletions
diff --git a/app/models/query.rb b/app/models/query.rb index 4f183329a..321821a93 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -984,7 +984,7 @@ class Query < ActiveRecord::Base " SELECT customized_id FROM #{CustomValue.table_name}" + " WHERE customized_type='#{target_class}' AND custom_field_id=#{chained_custom_field_id}" + " AND #{sql_for_field(field, operator, value, CustomValue.table_name, 'value')}))" - + end def sql_for_custom_field_attribute(field, operator, value, custom_field_id, attribute) @@ -1048,7 +1048,7 @@ class Query < ActiveRecord::Base end when "!*" sql = "#{db_table}.#{db_field} IS NULL" - sql << " OR #{db_table}.#{db_field} = ''" if is_custom_filter + sql << " OR #{db_table}.#{db_field} = ''" if (is_custom_filter || [:text, :string].include?(type_for(field))) when "*" sql = "#{db_table}.#{db_field} IS NOT NULL" sql << " AND #{db_table}.#{db_field} <> ''" if is_custom_filter diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index 5a3283900..7f2ef3d1c 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -217,6 +217,18 @@ class QueryTest < ActiveSupport::TestCase assert issues.all? {|i| i.custom_field_value(2).blank?} end + def test_operator_none_for_text + query = IssueQuery.new(:name => '_') + query.add_filter('status_id', '*', ['']) + query.add_filter('description', '!*', ['']) + assert query.has_filter?('description') + issues = find_issues_with_query(query) + + assert issues.any? + assert issues.all? {|i| i.description.blank?} + assert_equal [11, 12], issues.map(&:id).sort + end + def test_operator_all query = IssueQuery.new(:project => Project.find(1), :name => '_') query.add_filter('fixed_version_id', '*', ['']) |