aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/locking
diff options
context:
space:
mode:
authorEmilio Tagua <miloops@gmail.com>2009-04-24 17:32:16 -0300
committerEmilio Tagua <miloops@gmail.com>2009-04-24 17:32:16 -0300
commit0e113a040d934958ce3805ce6cda73c655def444 (patch)
treed8de5ee5f731c9a3d97b5e2e18e07b270753ef2c /activerecord/lib/active_record/locking
parent649fd1058f00fe0471d7d97bd659d0dc8c91ef22 (diff)
downloadrails-0e113a040d934958ce3805ce6cda73c655def444.tar.gz
rails-0e113a040d934958ce3805ce6cda73c655def444.tar.bz2
rails-0e113a040d934958ce3805ce6cda73c655def444.zip
Refactored locking update
Diffstat (limited to 'activerecord/lib/active_record/locking')
-rw-r--r--activerecord/lib/active_record/locking/optimistic.rb16
1 files changed, 9 insertions, 7 deletions
diff --git a/activerecord/lib/active_record/locking/optimistic.rb b/activerecord/lib/active_record/locking/optimistic.rb
index ab0f5fc58d..1251e9f013 100644
--- a/activerecord/lib/active_record/locking/optimistic.rb
+++ b/activerecord/lib/active_record/locking/optimistic.rb
@@ -90,18 +90,20 @@ module ActiveRecord
begin
table = Arel(self.class.table_name)
- affected_rows = table.where(
- table[self.class.primary_key].eq(quoted_id).and(
- table[self.class.locking_column].eq(quote_value(previous_value))
- )
- )
attributes = {}
attributes_with_quotes(false, false, attribute_names).map { |k,v|
attributes.merge!(table[k] => v)
}
- unless affected_rows.update(attributes) == 1
+ affected_rows = table.where(
+ table[self.class.primary_key].eq(quoted_id).and(
+ table[self.class.locking_column].eq(quote_value(previous_value))
+ )
+ ).update(attributes)
+
+
+ unless affected_rows == 1
raise ActiveRecord::StaleObjectError, "Attempted to update a stale object"
end
@@ -121,7 +123,7 @@ module ActiveRecord
lock_col = self.class.locking_column
previous_value = send(lock_col).to_i
- table = Arel(self.class.table_name, connection)
+ table = Arel(self.class.table_name)
affected_rows = table.where(
table[self.class.primary_key].eq(quoted_id).and(
table[self.class.locking_column].eq(quote_value(previous_value))