diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index 225b54fd7..c13a29104 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -510,9 +510,11 @@ class IssueQuery < Query def sql_for_child_id_field(field, operator, value) case operator when "=" - parent_id = Issue.where(:id => value.first.to_i).pluck(:parent_id).first - if parent_id - "#{Issue.table_name}.id = #{parent_id}" + # accepts a comma separated list of child ids + child_ids = value.first.to_s.scan(/\d+/).map(&:to_i).uniq + ids = Issue.where(:id => child_ids).pluck(:parent_id).compact.uniq + if ids.present? + "#{Issue.table_name}.id IN (#{ids.join(",")})" else "1=0" end diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index 5d6c82008..4a4361fe9 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -290,6 +290,16 @@ class QueryTest < ActiveSupport::TestCase assert_equal [2,4,5], issues.map(&:id).sort end + def test_operator_is_on_child_id_should_accept_comma_separated_values + Issue.where(:id => [2,4]).update_all(:parent_id => 1) + Issue.where(:id => 5).update_all(:parent_id => 3) + query = IssueQuery.new(:name => '_') + query.add_filter("child_id", '=', ['2,4,5']) + issues = find_issues_with_query(query) + assert_equal 2, issues.size + 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'])