mirror of
https://github.com/github/rails.git
synced 2026-02-01 09:44:56 -05:00
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
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
*SVN*
|
||||
|
||||
* Base.update_all :order and :limit options. Useful for MySQL updates that must be ordered to avoid violating unique constraints. [Jeremy Kemper]
|
||||
|
||||
* Remove deprecated object transactions. People relying on this functionality should install the object_transactions plugin at http://code.bitsweat.net/svn/object_transactions. Closes #5637 [Koz, Jeremy Kemper]
|
||||
|
||||
* PostgreSQL: remove DateTime -> Time downcast. Warning: do not enable translate_results for the C bindings if you have timestamps outside Time's domain. [Jeremy Kemper]
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -569,6 +569,12 @@ class BasicsTest < Test::Unit::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
if current_adapter?(:MysqlAdapter)
|
||||
def test_update_all_with_order_and_limit
|
||||
assert_equal 1, Topic.update_all("content = 'bulk updated!'", nil, :limit => 1, :order => 'id DESC')
|
||||
end
|
||||
end
|
||||
|
||||
def test_update_many
|
||||
topic_data = { 1 => { "content" => "1 updated" }, 2 => { "content" => "2 updated" } }
|
||||
updated = Topic.update(topic_data.keys, topic_data.values)
|
||||
|
||||
Reference in New Issue
Block a user