diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-01-24 14:29:03 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-01-24 14:29:03 -0800 |
commit | 170fb5c80c990688f5f372a3ba0e6cb75fb6edf0 (patch) | |
tree | 94d393965d681c1ac236a9eb183ba7990be28065 /activerecord/lib/active_record | |
parent | de6a35b38a6e633e7639de25f6a83c7892fe8a01 (diff) | |
download | rails-170fb5c80c990688f5f372a3ba0e6cb75fb6edf0.tar.gz rails-170fb5c80c990688f5f372a3ba0e6cb75fb6edf0.tar.bz2 rails-170fb5c80c990688f5f372a3ba0e6cb75fb6edf0.zip |
reduce the number of queries on IN clauses, fix relation queries in `where`
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/relation/predicate_builder.rb | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/relation/query_methods.rb | 5 |
2 files changed, 6 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/relation/predicate_builder.rb b/activerecord/lib/active_record/relation/predicate_builder.rb index 330ec08535..537ebbef28 100644 --- a/activerecord/lib/active_record/relation/predicate_builder.rb +++ b/activerecord/lib/active_record/relation/predicate_builder.rb @@ -66,7 +66,7 @@ module ActiveRecord private def self.build(attribute, value) case value - when Array, ActiveRecord::Associations::CollectionProxy + when Array values = value.to_a.map {|x| x.is_a?(Base) ? x.id : x} ranges, values = values.partition {|v| v.is_a?(Range)} diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index 46c0d6206f..42849d6bc9 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -764,6 +764,11 @@ module ActiveRecord [@klass.send(:sanitize_sql, other.empty? ? opts : ([opts] + other))] when Hash attributes = @klass.send(:expand_hash_conditions_for_aggregates, opts) + + attributes.values.grep(ActiveRecord::Relation) do |rel| + self.bind_values += rel.bind_values + end + PredicateBuilder.build_from_hash(klass, attributes, table) else [opts] |