diff options
author | Marius Balteanu <marius.balteanu@zitec.com> | 2022-06-27 17:58:14 +0000 |
---|---|---|
committer | Marius Balteanu <marius.balteanu@zitec.com> | 2022-06-27 17:58:14 +0000 |
commit | 6e5b8f07ef0466086fc44fc02603337a6f1c4652 (patch) | |
tree | d1cbb14d89526a9e09ff0163770f4e69773e771f | |
parent | d7a8f6900d18046a7613771d419a20034df6532e (diff) | |
download | redmine-6e5b8f07ef0466086fc44fc02603337a6f1c4652.tar.gz redmine-6e5b8f07ef0466086fc44fc02603337a6f1c4652.zip |
Fix filter for chained User custom fields returns 500 internal server error when filtering after a float value (#37349).
git-svn-id: https://svn.redmine.org/redmine/trunk@21684 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | app/models/query.rb | 4 | ||||
-rw-r--r-- | test/unit/query_test.rb | 12 |
2 files changed, 14 insertions, 2 deletions
diff --git a/app/models/query.rb b/app/models/query.rb index 7695bc165..1a614f175 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -1176,7 +1176,7 @@ class Query < ActiveRecord::Base end filter = available_filters[field] - target_class = filter[:through].format.target_class + target_class = filter[:through].format.target_class.base_class "#{queried_table_name}.id #{not_in} IN (" + "SELECT customized_id FROM #{CustomValue.table_name}" + @@ -1184,7 +1184,7 @@ class Query < ActiveRecord::Base " AND CAST(CASE value WHEN '' THEN '0' ELSE value END AS decimal(30,0)) IN (" + " SELECT customized_id FROM #{CustomValue.table_name}" + " WHERE customized_type='#{target_class}' AND custom_field_id=#{chained_custom_field_id}" + - " AND #{sql_for_field(field, operator, value, CustomValue.table_name, 'value')}))" + " AND #{sql_for_field(field, operator, value, CustomValue.table_name, 'value', true)}))" end diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index dbf95519f..da8e43b90 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -948,6 +948,18 @@ class QueryTest < ActiveSupport::TestCase assert_equal issue1, result.first end + def test_filter_on_chained_user_custom_field_of_type_float + user_cf = UserCustomField.find(5) + user_cf.update! is_filter: true + + issue_cf = IssueCustomField.create!(:field_format => 'user', :is_for_all => true, :is_filter => true, :name => 'User custom field', :tracker_ids => [1]) + issue1 = Issue.create!(:project_id => 1, :tracker_id => 1, :custom_field_values => {issue_cf.id.to_s => '2'}, :subject => 'Test', :author_id => 1) + query = IssueQuery.new(:name => '_', :project => Project.find(1)) + query.filters = {"cf_#{issue_cf.id}.cf_#{user_cf.id}" => {:operator => '=', :values => ["30.1"]}} + + assert query.issues + end + def test_filter_on_me_by_anonymous_user User.current = nil query = |