提交 3666962d 编写于 作者: R Rafael França 提交者: GitHub

Merge pull request #28318 from bogdanvlviv/remove-ability-update-locking_column-value

Remove ability update locking_column value
......@@ -509,11 +509,6 @@
*Prathamesh Sonpatki*
* Optimistic locking: Added ability to update `locking_column` value.
Ignore optimistic locking if trying to update with new `locking_column` value.
*bogdanvlviv*
* Fixed: Optimistic locking does not work well with `null` in the database.
Fixes #26024.
......
......@@ -47,8 +47,6 @@ module Locking
# self.locking_column = :lock_person
# end
#
# Please note that the optimistic locking will be ignored if you update the
# locking column's value.
module Optimistic
extend ActiveSupport::Concern
......@@ -80,13 +78,11 @@ def _create_record(attribute_names = self.attribute_names, *)
def _update_record(attribute_names = self.attribute_names)
return super unless locking_enabled?
lock_col = self.class.locking_column
return super if attribute_names.include?(lock_col)
return 0 if attribute_names.empty?
begin
lock_col = self.class.locking_column
previous_lock_value = read_attribute_before_type_cast(lock_col)
increment_lock
......
......@@ -349,13 +349,14 @@ def test_partial_update
def test_partial_update_with_optimistic_locking
person = Person.new(first_name: "foo")
old_lock_version = person.lock_version
with_partial_writes Person, false do
assert_queries(2) { 2.times { person.save! } }
Person.where(id: person.id).update_all(first_name: "baz")
end
old_lock_version = person.lock_version
with_partial_writes Person, true do
assert_queries(0) { 2.times { person.save! } }
assert_equal old_lock_version, person.reload.lock_version
......
......@@ -247,17 +247,6 @@ def test_lock_without_default_should_work_with_null_in_the_database
assert_equal "new title2", t2.title
end
def test_lock_without_default_should_update_with_lock_col
t1 = LockWithoutDefault.create(title: "title1", lock_version: 6)
assert_equal 6, t1.lock_version
t1.update(lock_version: 0)
t1.reload
assert_equal 0, t1.lock_version
end
def test_lock_without_default_queries_count
t1 = LockWithoutDefault.create(title: "title1")
......@@ -270,12 +259,6 @@ def test_lock_without_default_queries_count
assert_equal "title2", t1.title
assert_equal 1, t1.lock_version
assert_queries(1) { t1.update(title: "title3", lock_version: 6) }
t1.reload
assert_equal "title3", t1.title
assert_equal 6, t1.lock_version
t2 = LockWithoutDefault.new(title: "title1")
assert_queries(1) { t2.save! }
......@@ -321,17 +304,6 @@ def test_lock_with_custom_column_without_default_should_work_with_null_in_the_da
assert_equal "new title2", t2.title
end
def test_lock_with_custom_column_without_default_should_update_with_lock_col
t1 = LockWithCustomColumnWithoutDefault.create(title: "title1", custom_lock_version: 6)
assert_equal 6, t1.custom_lock_version
t1.update(custom_lock_version: 0)
t1.reload
assert_equal 0, t1.custom_lock_version
end
def test_lock_with_custom_column_without_default_queries_count
t1 = LockWithCustomColumnWithoutDefault.create(title: "title1")
......@@ -344,12 +316,6 @@ def test_lock_with_custom_column_without_default_queries_count
assert_equal "title2", t1.title
assert_equal 1, t1.custom_lock_version
assert_queries(1) { t1.update(title: "title3", custom_lock_version: 6) }
t1.reload
assert_equal "title3", t1.title
assert_equal 6, t1.custom_lock_version
t2 = LockWithCustomColumnWithoutDefault.new(title: "title1")
assert_queries(1) { t2.save! }
......
......@@ -953,9 +953,6 @@ class Client < ApplicationRecord
end
```
NOTE: Please note that the optimistic locking will be ignored if you update the
locking column's value.
### Pessimistic Locking
Pessimistic locking uses a locking mechanism provided by the underlying database. Using `lock` when building a relation obtains an exclusive lock on the selected rows. Relations using `lock` are usually wrapped inside a transaction for preventing deadlock conditions.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册