summaryrefslogtreecommitdiffstats
path: root/app/models/query.rb
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2011-07-10 08:00:25 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2011-07-10 08:00:25 +0000
commit932d4cdfead379e24934df6530f4d98abcfab18e (patch)
tree05e4cdb1ff572d8c35df61260f2892d0b40c94ed /app/models/query.rb
parent4a4a71349a45bdc8a55071e535bc0a8b9c02a5ee (diff)
downloadredmine-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.rb15
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