aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/persistence_test.rb
diff options
context:
space:
mode:
authorthedarkone <thedarkone2@gmail.com>2011-07-25 13:30:43 +0200
committerthedarkone <thedarkone2@gmail.com>2011-07-25 13:33:44 +0200
commit10863580aa14c7456f10c1fe9b4e93fcd18e0ef8 (patch)
tree0d9b564cc80fa0272dbd01eb110fe8d820a6acfa /activerecord/test/cases/persistence_test.rb
parent02691d3516e68b2de5545ec7a495024a377f89fc (diff)
downloadrails-10863580aa14c7456f10c1fe9b4e93fcd18e0ef8.tar.gz
rails-10863580aa14c7456f10c1fe9b4e93fcd18e0ef8.tar.bz2
rails-10863580aa14c7456f10c1fe9b4e93fcd18e0ef8.zip
Bring back the ability to provide :order for update_all.
Diffstat (limited to 'activerecord/test/cases/persistence_test.rb')
-rw-r--r--activerecord/test/cases/persistence_test.rb20
1 files changed, 20 insertions, 0 deletions
diff --git a/activerecord/test/cases/persistence_test.rb b/activerecord/test/cases/persistence_test.rb
index 57d1441128..9cd07fa8a5 100644
--- a/activerecord/test/cases/persistence_test.rb
+++ b/activerecord/test/cases/persistence_test.rb
@@ -29,6 +29,26 @@ class PersistencesTest < ActiveRecord::TestCase
end
end
+ def test_update_all_doesnt_ignore_order
+ assert_equal authors(:david).id + 1, authors(:mary).id # make sure there is going to be a duplicate PK error
+ test_update_with_order_succeeds = lambda do |order|
+ begin
+ Author.order(order).update_all('id = id + 1')
+ rescue ActiveRecord::ActiveRecordError
+ false
+ end
+ end
+
+ if test_update_with_order_succeeds.call('id DESC')
+ assert !test_update_with_order_succeeds.call('id ASC') # test that this wasn't a fluke and using an incorrect order results in an exception
+ else
+ # test that we're failing because the current Arel's engine doesn't support UPDATE ORDER BY queries is using subselects instead
+ assert_sql(/\AUPDATE .+ \(SELECT .* ORDER BY id DESC\)\Z/i) do
+ test_update_with_order_succeeds.call('id DESC')
+ end
+ end
+ end
+
def test_update_all_with_order_and_limit_updates_subset_only
author = authors(:david)
assert_nothing_raised do