diff options
Diffstat (limited to 'activerecord/lib/active_record/locking')
-rw-r--r-- | activerecord/lib/active_record/locking/optimistic.rb | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/activerecord/lib/active_record/locking/optimistic.rb b/activerecord/lib/active_record/locking/optimistic.rb index 217bd3def7..7b7f87341e 100644 --- a/activerecord/lib/active_record/locking/optimistic.rb +++ b/activerecord/lib/active_record/locking/optimistic.rb @@ -23,7 +23,6 @@ module ActiveRecord # This method uses the same syntax as <tt>set_table_name</tt> module Optimistic def self.included(base) #:nodoc: - super base.extend ClassMethods base.cattr_accessor :lock_optimistically, :instance_writer => false @@ -41,41 +40,42 @@ module ActiveRecord self.class.locking_enabled? end - def attributes_from_column_definition_with_lock - result = attributes_from_column_definition_without_lock + private + def attributes_from_column_definition_with_lock + result = attributes_from_column_definition_without_lock - # If the locking column has no default value set, - # start the lock version at zero. Note we can't use - # locking_enabled? at this point as @attributes may - # not have been initialized yet + # If the locking column has no default value set, + # start the lock version at zero. Note we can't use + # locking_enabled? at this point as @attributes may + # not have been initialized yet - if lock_optimistically && result.include?(self.class.locking_column) - result[self.class.locking_column] ||= 0 - end + if lock_optimistically && result.include?(self.class.locking_column) + result[self.class.locking_column] ||= 0 + end - return result - end + return result + end - def update_with_lock #:nodoc: - return update_without_lock unless locking_enabled? + def update_with_lock #:nodoc: + return update_without_lock unless locking_enabled? - lock_col = self.class.locking_column - previous_value = send(lock_col) - send(lock_col + '=', previous_value + 1) + lock_col = self.class.locking_column + previous_value = send(lock_col) + send(lock_col + '=', previous_value + 1) - affected_rows = connection.update(<<-end_sql, "#{self.class.name} Update with optimistic locking") - UPDATE #{self.class.table_name} - SET #{quoted_comma_pair_list(connection, attributes_with_quotes(false))} - WHERE #{self.class.primary_key} = #{quote_value(id)} - AND #{self.class.quoted_locking_column} = #{quote_value(previous_value)} - end_sql + affected_rows = connection.update(<<-end_sql, "#{self.class.name} Update with optimistic locking") + UPDATE #{self.class.table_name} + SET #{quoted_comma_pair_list(connection, attributes_with_quotes(false))} + WHERE #{self.class.primary_key} = #{quote_value(id)} + AND #{self.class.quoted_locking_column} = #{quote_value(previous_value)} + end_sql - unless affected_rows == 1 - raise ActiveRecord::StaleObjectError, "Attempted to update a stale object" - end + unless affected_rows == 1 + raise ActiveRecord::StaleObjectError, "Attempted to update a stale object" + end - return true - end + return true + end module ClassMethods DEFAULT_LOCKING_COLUMN = 'lock_version' |