diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2011-07-10 08:00:25 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2011-07-10 08:00:25 +0000 |
commit | 932d4cdfead379e24934df6530f4d98abcfab18e (patch) | |
tree | 05e4cdb1ff572d8c35df61260f2892d0b40c94ed /app/models/query.rb | |
parent | 4a4a71349a45bdc8a55071e535bc0a8b9c02a5ee (diff) | |
download | redmine-932d4cdfead379e24934df6530f4d98abcfab18e.tar.gz redmine-932d4cdfead379e24934df6530f4d98abcfab18e.zip |
Adds "between" operator for numeric filters (#6180).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@6217 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models/query.rb')
-rw-r--r-- | app/models/query.rb | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/app/models/query.rb b/app/models/query.rb index 165bbac84..fa8a449c5 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -101,6 +101,7 @@ class Query < ActiveRecord::Base "*" => :label_all, ">=" => :label_greater_or_equal, "<=" => :label_less_or_equal, + "><" => :label_between, "<t+" => :label_in_less_than, ">t+" => :label_in_more_than, "t+" => :label_in, @@ -122,7 +123,7 @@ class Query < ActiveRecord::Base :date_past => [ ">t-", "<t-", "t-", "t", "w" ], :string => [ "=", "~", "!", "!~" ], :text => [ "~", "!~" ], - :integer => [ "=", ">=", "<=", "!*", "*" ] } + :integer => [ "=", ">=", "<=", "><", "!*", "*" ] } cattr_reader :operators_by_filter_type @@ -306,6 +307,10 @@ class Query < ActiveRecord::Base def values_for(field) has_filter?(field) ? filters[field][:values] : nil end + + def value_for(field, index=0) + (values_for(field) || [])[index] + end def label_for(field) label = available_filters[field][:name] if available_filters.has_key?(field) @@ -627,6 +632,12 @@ class Query < ActiveRecord::Base else sql = "#{db_table}.#{db_field} <= #{value.first.to_i}" end + when "><" + if is_custom_filter + sql = "CAST(#{db_table}.#{db_field} AS decimal(60,3)) BETWEEN #{value[0].to_i} AND #{value[1].to_i}" + else + sql = "#{db_table}.#{db_field} BETWEEN #{value[0].to_i} AND #{value[1].to_i}" + end when "o" sql = "#{IssueStatus.table_name}.is_closed=#{connection.quoted_false}" if field == "status_id" when "c" @@ -654,6 +665,8 @@ class Query < ActiveRecord::Base sql = "LOWER(#{db_table}.#{db_field}) LIKE '%#{connection.quote_string(value.first.to_s.downcase)}%'" when "!~" sql = "LOWER(#{db_table}.#{db_field}) NOT LIKE '%#{connection.quote_string(value.first.to_s.downcase)}%'" + else + raise "Unknown query operator #{operator}" end return sql |