diff options
author | Rafael França <rafaelmfranca@gmail.com> | 2016-04-28 18:54:31 -0300 |
---|---|---|
committer | Rafael França <rafaelmfranca@gmail.com> | 2016-04-28 18:54:31 -0300 |
commit | 03b62b8420497b393e1e205168961d23ff51ecab (patch) | |
tree | 96ac34a85ac33aaba9c14ff99e9b87850d4162e8 /activerecord | |
parent | ef5c46d2ee8dc8da20f54dbedc9805f71791d75c (diff) | |
parent | ba05b3c218568467277ea309dcfd10d34bf8e756 (diff) | |
download | rails-03b62b8420497b393e1e205168961d23ff51ecab.tar.gz rails-03b62b8420497b393e1e205168961d23ff51ecab.tar.bz2 rails-03b62b8420497b393e1e205168961d23ff51ecab.zip |
Merge pull request #24653 from kbrock/kinder_locking_column
schema_load triggers 2nd schema_load (via locking)
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/locking/optimistic.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/schema_loading_test.rb | 53 |
2 files changed, 54 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/locking/optimistic.rb b/activerecord/lib/active_record/locking/optimistic.rb index 1040327a5d..1e37ffefc6 100644 --- a/activerecord/lib/active_record/locking/optimistic.rb +++ b/activerecord/lib/active_record/locking/optimistic.rb @@ -150,7 +150,7 @@ module ActiveRecord # The version column used for optimistic locking. Defaults to +lock_version+. def locking_column - reset_locking_column unless defined?(@locking_column) + @locking_column = DEFAULT_LOCKING_COLUMN unless defined?(@locking_column) @locking_column end diff --git a/activerecord/test/cases/schema_loading_test.rb b/activerecord/test/cases/schema_loading_test.rb new file mode 100644 index 0000000000..2815ccd842 --- /dev/null +++ b/activerecord/test/cases/schema_loading_test.rb @@ -0,0 +1,53 @@ +require 'thread' +require "cases/helper" + +module SchemaLoadCounter + extend ActiveSupport::Concern + + module ClassMethods + attr_accessor :load_schema_calls + + def load_schema! + self.load_schema_calls ||= 0 + self.load_schema_calls +=1 + super + end + end +end + +class SchemaLoadingTest < ActiveRecord::TestCase + def test_basic_model_is_loaded_once + klass = define_model + klass.new + assert_equal 1, klass.load_schema_calls + end + + def test_model_with_custom_lock_is_loaded_once + klass = define_model do |c| + c.table_name = :lock_without_defaults_cust + c.locking_column = :custom_lock_version + end + klass.new + assert_equal 1, klass.load_schema_calls + end + + def test_model_with_changed_custom_lock_is_loaded_twice + klass = define_model do |c| + c.table_name = :lock_without_defaults_cust + end + klass.new + klass.locking_column = :custom_lock_version + klass.new + assert_equal 2, klass.load_schema_calls + end + + private + + def define_model + Class.new(ActiveRecord::Base) do + include SchemaLoadCounter + self.table_name = :lock_without_defaults + yield self if block_given? + end + end +end |