diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2007-08-26 12:29:53 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2007-08-26 12:29:53 +0000 |
commit | 8da5bad29516be6cbe1bc52e78837ac1ec292026 (patch) | |
tree | ec32a3548a51d0f3f1e33920e17bc54e2b40460c /app/models | |
parent | 452a20a69a574346f9ae8876e5402aabb11edbd5 (diff) | |
download | redmine-8da5bad29516be6cbe1bc52e78837ac1ec292026.tar.gz redmine-8da5bad29516be6cbe1bc52e78837ac1ec292026.zip |
Fixed: queries with multiple custom fields return no result.
git-svn-id: http://redmine.rubyforge.org/svn/trunk@668 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/query.rb | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/app/models/query.rb b/app/models/query.rb index 88946655f..28f65ddf6 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -164,7 +164,8 @@ class Query < ActiveRecord::Base end def statement - sql = "1=1" + # project/subprojects clause + clause = '' if has_filter?("subproject_id") subproject_ids = [] if operator_for("subproject_id") == "=" @@ -172,27 +173,29 @@ class Query < ActiveRecord::Base else subproject_ids = project.active_children.collect{|p| p.id} end - sql << " AND #{Issue.table_name}.project_id IN (%d,%s)" % [project.id, subproject_ids.join(",")] if project + clause << "#{Issue.table_name}.project_id IN (%d,%s)" % [project.id, subproject_ids.join(",")] if project else - sql << " AND #{Issue.table_name}.project_id=%d" % project.id if project + clause << "#{Issue.table_name}.project_id=%d" % project.id if project end + + # filters clauses + filters_clauses = [] filters.each_key do |field| next if field == "subproject_id" v = values_for(field).clone next unless v and !v.empty? - - sql = sql + " AND " unless sql.empty? - sql << "(" - + + sql = '' if field =~ /^cf_(\d+)$/ # custom field db_table = CustomValue.table_name - db_field = "value" - sql << "#{db_table}.custom_field_id = #{$1} AND " + 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 " else # regular field db_table = Issue.table_name db_field = field + sql << '(' end # "me" value subsitution @@ -232,9 +235,11 @@ class Query < ActiveRecord::Base when "!~" sql = sql + "#{db_table}.#{db_field} NOT LIKE '%#{connection.quote_string(v.first)}%'" end - sql << ")" - + sql << ')' + filters_clauses << sql end if filters and valid? - sql + + clause << (' AND ' + filters_clauses.join(' AND ')) unless filters_clauses.empty? + clause end end |