Feature #30808 ยป 30808-fix-child-id-filter.patch
| app/models/issue_query.rb | ||
|---|---|---|
| 510 | 510 |
def sql_for_child_id_field(field, operator, value) |
| 511 | 511 |
case operator |
| 512 | 512 |
when "=" |
| 513 |
parent_id = Issue.where(:id => value.first.to_i).pluck(:parent_id).first |
|
| 514 |
if parent_id |
|
| 515 |
"#{Issue.table_name}.id = #{parent_id}"
|
|
| 513 |
# accepts a comma separated list of child ids |
|
| 514 |
child_ids = value.first.to_s.scan(/\d+/).map(&:to_i).uniq |
|
| 515 |
ids = Issue.where(:id => child_ids).pluck(:parent_id).compact.uniq |
|
| 516 |
if ids.present? |
|
| 517 |
"#{Issue.table_name}.id IN (#{ids.join(",")})"
|
|
| 516 | 518 |
else |
| 517 | 519 |
"1=0" |
| 518 | 520 |
end |
| test/unit/query_test.rb | ||
|---|---|---|
| 290 | 290 |
assert_equal [2,4,5], issues.map(&:id).sort |
| 291 | 291 |
end |
| 292 | 292 | |
| 293 |
def test_operator_is_on_child_id_should_accept_comma_separated_values |
|
| 294 |
Issue.where(:id => [2,4]).update_all(:parent_id => 1) |
|
| 295 |
Issue.where(:id => 5).update_all(:parent_id => 3) |
|
| 296 |
query = IssueQuery.new(:name => '_') |
|
| 297 |
query.add_filter("child_id", '=', ['2,4,5'])
|
|
| 298 |
issues = find_issues_with_query(query) |
|
| 299 |
assert_equal 2, issues.size |
|
| 300 |
assert_equal [1,3], issues.map(&:id).sort |
|
| 301 |
end |
|
| 302 | ||
| 293 | 303 |
def test_operator_between_on_issue_id_should_return_range |
| 294 | 304 |
query = IssueQuery.new(:name => '_') |
| 295 | 305 |
query.add_filter("issue_id", '><', ['2','3'])
|