If we're deleting all records in an association, don't add a IN(..)
clause to the query.

Fixes #3672.
This commit is contained in:
Jon Leighton
2011-11-19 14:10:21 +00:00
parent 2ef4947ab0
commit fec85cf10d
2 changed files with 11 additions and 2 deletions

View File

@@ -67,6 +67,11 @@
## Rails 3.1.3 (unreleased) ##
* Perf fix: If we're deleting all records in an association, don't add a IN(..) clause
to the query. *GH 3672*
*Jon Leighton*
* Fix bug with referencing other mysql databases in set_table_name. *GH 3690*
* Fix performance bug with mysql databases on a server with lots of other databses. *GH 3678*

View File

@@ -89,8 +89,12 @@ module ActiveRecord
records.each { |r| r.destroy }
update_counter(-records.length) unless inverse_updates_counter_cache?
else
keys = records.map { |r| r[reflection.association_primary_key] }
scope = scoped.where(reflection.association_primary_key => keys)
scope = scoped
unless records == load_target
keys = records.map { |r| r[reflection.association_primary_key] }
scope = scoped.where(reflection.association_primary_key => keys)
end
if method == :delete_all
update_counter(-scope.delete_all)