From 73477b41eb2c5062431c82e8718eb2ef89d7be99 Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Tue, 2 Jan 2024 00:41:00 +0000 Subject: [PATCH] Fix "any" operator for text filters to exclude empty text values (#39991). Patch by Go MAEDA (@maeda). git-svn-id: https://svn.redmine.org/redmine/trunk@22583 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/query.rb | 2 +- test/unit/query_test.rb | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/app/models/query.rb b/app/models/query.rb index 9f3ce4c08..b9a7181fa 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -1276,7 +1276,7 @@ class Query < ActiveRecord::Base 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 + sql += " AND #{db_table}.#{db_field} <> ''" if is_custom_filter || [:text, :string].include?(type_for(field)) when ">=" if [:date, :date_past].include?(type_for(field)) sql = date_clause(db_table, db_field, parse_date(value.first), nil, is_custom_filter) diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index a1c528e26..462934f1e 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -214,7 +214,7 @@ class QueryTest < ActiveSupport::TestCase assert issues.all? {|i| i.custom_field_value(2).blank?} end - def test_operator_none_for_text + def test_operator_none_for_blank_text query = IssueQuery.new(:name => '_') query.add_filter('status_id', '*', ['']) query.add_filter('description', '!*', ['']) @@ -226,6 +226,19 @@ class QueryTest < ActiveSupport::TestCase assert_equal [11, 12], issues.map(&:id).sort end + def test_operator_any_for_blank_text + Issue.where(id: [1, 2]).update_all(description: '') + 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.present?} + assert_empty issues.map(&:id) & [1, 2] + end + def test_operator_all query = IssueQuery.new(:project => Project.find(1), :name => '_') query.add_filter('fixed_version_id', '*', ['']) -- 2.39.5