diff options
author | Yves Senn <yves.senn@gmail.com> | 2014-01-29 07:40:52 -0800 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2014-01-29 07:40:52 -0800 |
commit | 40e7fe3451df8e5b454f7d0472396d2429edc0e5 (patch) | |
tree | 7f63409243031eaaea72dad8b32ab1f980238a64 /activerecord | |
parent | f142527eb30626904cb1e655a1a28801f08b8acf (diff) | |
parent | 66e533f9b13f2ea1f56a19246af55621cc368489 (diff) | |
download | rails-40e7fe3451df8e5b454f7d0472396d2429edc0e5.tar.gz rails-40e7fe3451df8e5b454f7d0472396d2429edc0e5.tar.bz2 rails-40e7fe3451df8e5b454f7d0472396d2429edc0e5.zip |
Merge pull request #13868 from mauricio/bug-13788
Correctly send the string given to lock! and reload(:lock) to the lock scope - fixes #13788
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 10 | ||||
-rw-r--r-- | activerecord/lib/active_record/persistence.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/locking_test.rb | 11 |
3 files changed, 22 insertions, 1 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 2e103ba354..ddf5592a78 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,13 @@ +* 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* diff --git a/activerecord/lib/active_record/persistence.rb b/activerecord/lib/active_record/persistence.rb index 460fbdb3f8..b1b35ed940 100644 --- a/activerecord/lib/active_record/persistence.rb +++ b/activerecord/lib/active_record/persistence.rb @@ -389,7 +389,7 @@ module ActiveRecord 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 diff --git a/activerecord/test/cases/locking_test.rb b/activerecord/test/cases/locking_test.rb index a16ed963fe..c373dc1511 100644 --- a/activerecord/test/cases/locking_test.rb +++ b/activerecord/test/cases/locking_test.rb @@ -431,6 +431,17 @@ unless current_adapter?(:SybaseAdapter, :OpenBaseAdapter) || in_memory_db? 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 } |