Skip to content
Browse files

Revert "Ensure Model#destroy respects optimistic locking"

Unresolved issues with :dependent => :destroy and counter caching.

[#1966 state:open]

This reverts commit 0d92288.
  • Loading branch information...
1 parent 88d2e4c commit ed320cd8968bf67f4af981a5727ff0dce3ee1025 @jeremy jeremy committed Nov 17, 2009
Showing with 0 additions and 51 deletions.
  1. +0 −33 activerecord/lib/active_record/locking/optimistic.rb
  2. +0 −18 activerecord/test/cases/locking_test.rb
View
33 activerecord/lib/active_record/locking/optimistic.rb
@@ -23,16 +23,6 @@ module Locking
# p2.first_name = "should fail"
# p2.save # Raises a ActiveRecord::StaleObjectError
#
- # Optimistic locking will also check for stale data when objects are destroyed. Example:
- #
- # p1 = Person.find(1)
- # p2 = Person.find(1)
- #
- # p1.first_name = "Michael"
- # p1.save
- #
- # p2.destroy # Raises a ActiveRecord::StaleObjectError
- #
# You're then responsible for dealing with the conflict by rescuing the exception and either rolling back, merging,
# or otherwise apply the business logic needed to resolve the conflict.
#
@@ -49,7 +39,6 @@ def self.included(base) #:nodoc:
base.lock_optimistically = true
base.alias_method_chain :update, :lock
- base.alias_method_chain :destroy, :lock
base.alias_method_chain :attributes_from_column_definition, :lock
class << base
@@ -109,28 +98,6 @@ def update_with_lock(attribute_names = @attributes.keys) #:nodoc:
end
end
- def destroy_with_lock #:nodoc:
- return destroy_without_lock unless locking_enabled?
-
- unless new_record?
- lock_col = self.class.locking_column
- previous_value = send(lock_col).to_i
-
- affected_rows = connection.delete(
- "DELETE FROM #{self.class.quoted_table_name} " +
- "WHERE #{connection.quote_column_name(self.class.primary_key)} = #{quoted_id} " +
- "AND #{self.class.quoted_locking_column} = #{quote_value(previous_value)}",
- "#{self.class.name} Destroy"
- )
-
- unless affected_rows == 1
- raise ActiveRecord::StaleObjectError, "Attempted to delete a stale object"
- end
- end
-
- freeze
- end
-
module ClassMethods
DEFAULT_LOCKING_COLUMN = 'lock_version'
View
18 activerecord/test/cases/locking_test.rb
@@ -38,24 +38,6 @@ def test_lock_existing
assert_raise(ActiveRecord::StaleObjectError) { p2.save! }
end
- def test_lock_destroy
- p1 = Person.find(1)
- p2 = Person.find(1)
- assert_equal 0, p1.lock_version
- assert_equal 0, p2.lock_version
-
- p1.first_name = 'stu'
- p1.save!
- assert_equal 1, p1.lock_version
- assert_equal 0, p2.lock_version
-
- assert_raises(ActiveRecord::StaleObjectError) { p2.destroy }
-
- assert p1.destroy
- assert_equal true, p1.frozen?
- assert_raises(ActiveRecord::RecordNotFound) { Person.find(1) }
- end
-
def test_lock_repeating
p1 = Person.find(1)
p2 = Person.find(1)

0 comments on commit ed320cd

Please sign in to comment.
Something went wrong with that request. Please try again.