提交 40e7fe34 编写于 作者: Y Yves Senn

Merge pull request #13868 from mauricio/bug-13788

Correctly send the string given to lock! and reload(:lock) to the lock scope - fixes #13788
* Correctly send an user provided statement to a `lock!()` call.
person.lock! 'FOR SHARE NOWAIT'
# Before: SELECT * ... LIMIT 1 FOR UPDATE
# After: SELECT * ... LIMIT 1 FOR SHARE NOWAIT
Fixes #13788.
*Maurício Linhares*
* Handle aliased attributes `select()`, `order()` and `reorder()`.
*Tsutomu Kuroda*
......
......@@ -389,7 +389,7 @@ def reload(options = nil)
fresh_object =
if options && options[:lock]
self.class.unscoped { self.class.lock.find(id) }
self.class.unscoped { self.class.lock(options[:lock]).find(id) }
else
self.class.unscoped { self.class.find(id) }
end
......
......@@ -431,6 +431,17 @@ def test_with_lock_rolls_back_transaction
assert_equal old, person.reload.first_name
end
if current_adapter?(:PostgreSQLAdapter)
def test_lock_sending_custom_lock_statement
Person.transaction do
person = Person.find(1)
assert_sql(/LIMIT 1 FOR SHARE NOWAIT/) do
person.lock!('FOR SHARE NOWAIT')
end
end
end
end
if current_adapter?(:PostgreSQLAdapter, :OracleAdapter)
def test_no_locks_no_wait
first, second = duel { Person.find 1 }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册