]> source.dussan.org Git - redmine.git/commitdiff
Filter on issue ID with between/lesser/greater operator does not work (#23596).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 30 Aug 2016 19:28:00 +0000 (19:28 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 30 Aug 2016 19:28:00 +0000 (19:28 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@15751 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue_query.rb
test/unit/query_test.rb

index 0846d7096da1af1b9ee9408ec741373328619b08..c3923940c05597feb0442e9513a2ef86334abeb2 100644 (file)
@@ -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
 
index d6fa254817824307a147ad9875f267811a3e74a2..1aba3206515d81464aae2a68b99555d95b83124d 100644 (file)
@@ -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')