From 9f9232381ab6fc11a1d8a06bdbfb33d54d4e3623 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Tue, 30 Aug 2016 19:28:00 +0000 Subject: [PATCH] Filter on issue ID with between/lesser/greater operator does not work (#23596). git-svn-id: http://svn.redmine.org/redmine/trunk@15751 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/issue_query.rb | 13 +++++++++---- test/unit/query_test.rb | 10 +++++++++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index 0846d7096..c3923940c 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -466,11 +466,16 @@ class IssueQuery < Query end def sql_for_issue_id_field(field, operator, value) - ids = value.first.to_s.scan(/\d+/).map(&:to_i).join(",") - if ids.present? - "#{Issue.table_name}.id IN (#{ids})" + if operator == "=" + # accepts a comma separated list of ids + ids = value.first.to_s.scan(/\d+/).map(&:to_i) + if ids.present? + "#{Issue.table_name}.id IN (#{ids.join(",")})" + else + "1=0" + end else - "1=0" + sql_for_field("id", operator, value, Issue.table_name, "id") end end diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index d6fa25481..1aba32065 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -235,7 +235,7 @@ class QueryTest < ActiveSupport::TestCase assert_equal 2, issues.first.id end - def test_operator_is_on_integer_should_accept_comma_separated_values + def test_operator_is_on_issue_id_should_accept_comma_separated_values query = IssueQuery.new(:name => '_') query.add_filter("issue_id", '=', ['1,3']) issues = find_issues_with_query(query) @@ -243,6 +243,14 @@ class QueryTest < ActiveSupport::TestCase assert_equal [1,3], issues.map(&:id).sort end + def test_operator_between_on_issue_id_should_return_range + query = IssueQuery.new(:name => '_') + query.add_filter("issue_id", '><', ['2','3']) + issues = find_issues_with_query(query) + assert_equal 2, issues.size + assert_equal [2,3], issues.map(&:id).sort + end + def test_operator_is_on_integer_custom_field f = IssueCustomField.create!(:name => 'filter', :field_format => 'int', :is_for_all => true, :is_filter => true, :trackers => Tracker.all) CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => '7') -- 2.39.5