]> source.dussan.org Git - redmine.git/commitdiff
Filter out illegal values to prevent raise of PostgreSQL exceptions, restored last...
authorEtienne Massip <etienne.massip@gmail.com>
Tue, 18 Oct 2011 17:51:21 +0000 (17:51 +0000)
committerEtienne Massip <etienne.massip@gmail.com>
Tue, 18 Oct 2011 17:51:21 +0000 (17:51 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@7628 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/query.rb
test/functional/issues_controller_test.rb

index 9eac4b81c7b2749a102c01954480d05e92d0509e..411bef19fcbf44936f404a4531b959e8169da218 100644 (file)
@@ -333,6 +333,10 @@ class Query < ActiveRecord::Base
     available_filters[field][:type] if available_filters.has_key?(field)
   end
 
+  def allowed_values_for(field)
+    available_filters[field][:values] if available_filters.has_key?(field)
+  end
+
   def operator_for(field)
     has_filter?(field) ? filters[field][:operator] : nil
   end
@@ -649,6 +653,7 @@ class Query < ActiveRecord::Base
     sql = ''
     case operator
     when "="
+      value &= allowed_values_for(field).collect {|val| val[1]} if value.present? && allowed_values_for(field).present?
       if value.any?
         case type_for(field)
         when :date, :date_past
@@ -665,6 +670,7 @@ class Query < ActiveRecord::Base
         sql = "1=0"
       end
     when "!"
+      value &= allowed_values_for(field).collect {|val| val[1]} if value.present? && allowed_values_for(field).present?
       if value.any?
         sql = "(#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} NOT IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + "))"
       else
index a0ce7914c52029a417528419821dd62f75aa4670..692212134829f240c8ed65ca72017b5f65ea5201 100644 (file)
@@ -162,7 +162,9 @@ class IssuesControllerTest < ActionController::TestCase
         '!~This is part of a subject' => { :op => '!~', :values => ['This is part of a subject'] }},
       'tracker_id' => {
         '3' => { :op => '=', :values => ['3'] },
-        '=3' => { :op => '=', :values => ['3'] }},
+        '=3' => { :op => '=', :values => ['3'] },
+        '*' => { :op => '=', :values => ['*'] },
+        '!*' => { :op => '!', :values => ['*'] }},
       'start_date' => {
         '2011-10-12' => { :op => '=', :values => ['2011-10-12'] },
         '=2011-10-12' => { :op => '=', :values => ['2011-10-12'] },