From b0f1175e3eeacbc66cf797c82e9ea7465e6bbf8d Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Mon, 30 Sep 2019 13:15:45 +0000 Subject: [PATCH] Add support for "start with" and "end with" operators to "Files" filter (#31879). Patch by Yuichi HARADA. git-svn-id: http://svn.redmine.org/redmine/trunk@18570 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/issue_query.rb | 3 +++ test/unit/query_test.rb | 14 ++++++++++++++ 2 files changed, 17 insertions(+) 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']}}