Changeset 4958
- Timestamp:
- 09/04/06 00:02:38 (2 years ago)
- Files:
-
- trunk/activerecord/CHANGELOG (modified) (1 diff)
- trunk/activerecord/lib/active_record/locking/optimistic.rb (modified) (2 diffs)
- trunk/activerecord/test/fixtures/db_definitions/schema.rb (modified) (1 diff)
- trunk/activerecord/test/locking_test.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/activerecord/CHANGELOG
r4917 r4958 1 1 *SVN* 2 3 * Optimistic locking: gracefully handle nil versions, treat as zero. #5908 [Tom Ward] 2 4 3 5 * validates_confirmation_of only kicks in when the attribute, rather than its confirmation, is present. #785 [z@wzph.com] trunk/activerecord/lib/active_record/locking/optimistic.rb
r4462 r4958 31 31 32 32 base.alias_method_chain :update, :lock 33 base.alias_method_chain :attributes_from_column_definition, :lock 34 33 35 class << base 34 36 alias_method :locking_column=, :set_locking_column … … 38 40 def locking_enabled? #:nodoc: 39 41 lock_optimistically && respond_to?(self.class.locking_column) 42 end 43 44 def attributes_from_column_definition_with_lock 45 result = attributes_from_column_definition_without_lock 46 47 # If the locking column has no default value set, 48 # start the lock version at zero. Note we can't use 49 # locking_enabled? at this point as @attributes may 50 # not have been initialized yet 51 52 if lock_optimistically && result.include?(self.class.locking_column) 53 result[self.class.locking_column] ||= 0 54 end 55 56 return result 40 57 end 41 58 trunk/activerecord/test/fixtures/db_definitions/schema.rb
r4777 r4958 50 50 end 51 51 add_index :edges, [:source_id, :sink_id], :unique => true, :name => 'unique_edge_index' 52 53 create_table :lock_without_defaults, :force => true do |t| 54 t.column :lock_version, :integer 55 end 56 57 create_table :lock_with_custom_column_without_defaults, :force => true do |t| 58 t.column :custom_lock_version, :integer 59 end 52 60 end trunk/activerecord/test/locking_test.rb
r4601 r4958 2 2 require 'fixtures/person' 3 3 require 'fixtures/legacy_thing' 4 5 class LockWithoutDefault < ActiveRecord::Base; end 6 7 class LockWithCustomColumnWithoutDefault < ActiveRecord::Base 8 set_locking_column :custom_lock_version 9 end 4 10 5 11 class OptimisticLockingTest < Test::Unit::TestCase … … 56 62 assert_equal 1, p1.lock_version 57 63 assert_equal p1.lock_version, Person.new(p1.attributes).lock_version 64 end 65 66 def test_lock_without_default_sets_version_to_zero 67 t1 = LockWithoutDefault.new 68 assert_equal 0, t1.lock_version 69 end 70 71 def test_lock_with_custom_column_without_default_sets_version_to_zero 72 t1 = LockWithCustomColumnWithoutDefault.new 73 assert_equal 0, t1.custom_lock_version 58 74 end 59 75 end