diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index 7701cbfe2..155462c64 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -526,6 +526,9 @@ class IssueQuery < Query c = sql_contains("a.filename", value.first) e = (operator == "~" ? "EXISTS" : "NOT EXISTS") "#{e} (SELECT 1 FROM #{Attachment.table_name} a WHERE a.container_type = 'Issue' AND a.container_id = #{Issue.table_name}.id AND #{c})" + when "^", "$" + c = sql_contains("a.filename", value.first, (operator == "^" ? :starts_with : :ends_with) => true) + "EXISTS (SELECT 1 FROM #{Attachment.table_name} a WHERE a.container_type = 'Issue' AND a.container_id = #{Issue.table_name}.id AND #{c})" end end diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index 84bb1e939..9a8bb3c84 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -1353,6 +1353,20 @@ class QueryTest < ActiveSupport::TestCase assert_nil issues.detect {|issue| issue.attachments.any? {|attachment| attachment.filename.include?('error281')}} end + def test_filter_on_attachment_when_starts_with + query = IssueQuery.new(:name => '_') + query.filters = {"attachment" => {:operator => '^', :values => ['testfile']}} + issues = find_issues_with_query(query) + assert_equal [14], issues.collect(&:id).sort + end + + def test_filter_on_attachment_when_ends_with + query = IssueQuery.new(:name => '_') + query.filters = {"attachment" => {:operator => '$', :values => ['zip']}} + issues = find_issues_with_query(query) + assert_equal [3, 4], issues.collect(&:id).sort + end + def test_filter_on_subject_when_starts_with query = IssueQuery.new(:name => '_') query.filters = {'subject' => {:operator => '^', :values => ['issue']}}