]> source.dussan.org Git - redmine.git/commitdiff
Fixes custom field filters behaviour (#1078).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 26 Apr 2008 16:55:24 +0000 (16:55 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 26 Apr 2008 16:55:24 +0000 (16:55 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1362 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/query.rb
test/unit/query_test.rb

index c54c143e2e1e65be137ca89cbc063da50544937e..641c0d17b2dbd91fbfc5875a2b2a65e3f0b63ad7 100644 (file)
@@ -301,7 +301,7 @@ class Query < ActiveRecord::Base
         # custom field
         db_table = CustomValue.table_name
         db_field = 'value'
-        sql << "#{Issue.table_name}.id IN (SELECT #{db_table}.customized_id FROM #{db_table} where #{db_table}.customized_type='Issue' AND #{db_table}.customized_id=#{Issue.table_name}.id AND #{db_table}.custom_field_id=#{$1} AND "
+        sql << "#{Issue.table_name}.id IN (SELECT #{Issue.table_name}.id FROM #{Issue.table_name} LEFT OUTER JOIN #{db_table} ON #{db_table}.customized_type='Issue' AND #{db_table}.customized_id=#{Issue.table_name}.id AND #{db_table}.custom_field_id=#{$1} WHERE "
       else
         # regular field
         db_table = Issue.table_name
@@ -320,9 +320,9 @@ class Query < ActiveRecord::Base
       when "!"
         sql = sql + "(#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} NOT IN (" + v.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + "))"
       when "!*"
-        sql = sql + "#{db_table}.#{db_field} IS NULL"
+        sql = sql + "#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} = ''"
       when "*"
-        sql = sql + "#{db_table}.#{db_field} IS NOT NULL"
+        sql = sql + "#{db_table}.#{db_field} IS NOT NULL AND #{db_table}.#{db_field} <> ''"
       when ">="
         sql = sql + "#{db_table}.#{db_field} >= #{v.first.to_i}"
       when "<="
index 3a9d19112b2975d598654f5ef4748bc8f020911f..d291018fbaef34fed65623878b88adc6c45c97ff 100644 (file)
@@ -23,7 +23,7 @@ class QueryTest < Test::Unit::TestCase
   def test_query_with_multiple_custom_fields
     query = Query.find(1)
     assert query.valid?
-    assert query.statement.include?("custom_values.value IN ('MySQL')")
+    assert query.statement.include?("#{CustomValue.table_name}.value IN ('MySQL')")
     issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
     assert_equal 1, issues.length
     assert_equal Issue.find(3), issues.first