From a38f28fff1e9e3faeeb22ac9b7c6b3cdcb7e2b29 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Sat, 17 Mar 2007 15:48:47 +0000 Subject: Base.update_all :order and :limit options. Useful for MySQL updates that must be ordered to avoid violating unique constraints. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6440 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/lib/active_record/base.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'activerecord/lib/active_record') diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index cb50d64658..c680d7e304 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -501,9 +501,15 @@ module ActiveRecord #:nodoc: # Updates all records with the SET-part of an SQL update statement in +updates+ and returns an integer with the number of rows updated. # A subset of the records can be selected by specifying +conditions+. Example: # Billing.update_all "category = 'authorized', approved = 1", "author = 'David'" - def update_all(updates, conditions = nil) + # + # Optional :order and :limit options may be given as the third parameter, + # but their behavior is database-specific. + def update_all(updates, conditions = nil, options = {}) sql = "UPDATE #{table_name} SET #{sanitize_sql_for_assignment(updates)} " - add_conditions!(sql, conditions, scope(:find)) + scope = scope(:find) + add_conditions!(sql, conditions, scope) + add_order!(sql, options[:order], scope) + add_limit!(sql, options, scope) connection.update(sql, "#{name} Update") end -- cgit v1.2.3