From d736568f41262755dc80f81b2f73d8254925e414 Mon Sep 17 00:00:00 2001 From: Marcel Molina Date: Mon, 10 Oct 2005 18:59:56 +0000 Subject: Speed up the setting of table_name. Closes #2428. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2520 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/CHANGELOG | 2 ++ activerecord/lib/active_record/base.rb | 8 +++++++- activerecord/test/base_test.rb | 11 +++++++++++ activerecord/test/migration_test.rb | 9 +++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) (limited to 'activerecord') diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 6557e76a66..3311b082ca 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Speed up the setting of table_name. #2428. [skaes@web.de] + * Optimize instantiation of STI subclass records. In partial fullfilment of #1236. [skaes@web.de] * Fix typo of 'constrains' to 'contraints'. #2069. [Michael Schuerig ] diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 5e61d26b79..ab9b5d6221 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -552,7 +552,13 @@ module ActiveRecord #:nodoc: # set_table_name "mice" # end def table_name - "#{table_name_prefix}#{undecorated_table_name(class_name_of_active_record_descendant(self))}#{table_name_suffix}" + reset_table_name + end + + def reset_table_name + name = "#{table_name_prefix}#{undecorated_table_name(class_name_of_active_record_descendant(self))}#{table_name_suffix}" + set_table_name name + name end # Defines the primary key field -- can be overridden in subclasses. Overwriting will negate any effect of the diff --git a/activerecord/test/base_test.rb b/activerecord/test/base_test.rb index c9e2d30a9e..4f591e2cac 100755 --- a/activerecord/test/base_test.rb +++ b/activerecord/test/base_test.rb @@ -296,31 +296,42 @@ class BasicsTest < Test::Unit::TestCase assert_equal "master_credit_cards", MasterCreditCard.table_name ActiveRecord::Base.pluralize_table_names = false + [Category, Smarts, CreditCard, MasterCreditCard].each{|c| c.reset_table_name} assert_equal "category", Category.table_name assert_equal "smarts", Smarts.table_name assert_equal "credit_card", CreditCard.table_name assert_equal "master_credit_card", MasterCreditCard.table_name ActiveRecord::Base.pluralize_table_names = true + [Category, Smarts, CreditCard, MasterCreditCard].each{|c| c.reset_table_name} ActiveRecord::Base.table_name_prefix = "test_" + Category.reset_table_name assert_equal "test_categories", Category.table_name ActiveRecord::Base.table_name_suffix = "_test" + Category.reset_table_name assert_equal "test_categories_test", Category.table_name ActiveRecord::Base.table_name_prefix = "" + Category.reset_table_name assert_equal "categories_test", Category.table_name ActiveRecord::Base.table_name_suffix = "" + Category.reset_table_name assert_equal "categories", Category.table_name ActiveRecord::Base.pluralize_table_names = false ActiveRecord::Base.table_name_prefix = "test_" + Category.reset_table_name assert_equal "test_category", Category.table_name ActiveRecord::Base.table_name_suffix = "_test" + Category.reset_table_name assert_equal "test_category_test", Category.table_name ActiveRecord::Base.table_name_prefix = "" + Category.reset_table_name assert_equal "category_test", Category.table_name ActiveRecord::Base.table_name_suffix = "" + Category.reset_table_name assert_equal "category", Category.table_name ActiveRecord::Base.pluralize_table_names = true + [Category, Smarts, CreditCard, MasterCreditCard].each{|c| c.reset_table_name} end def test_destroy_all diff --git a/activerecord/test/migration_test.rb b/activerecord/test/migration_test.rb index 317ac3720b..702fef7436 100644 --- a/activerecord/test/migration_test.rb +++ b/activerecord/test/migration_test.rb @@ -299,9 +299,11 @@ if ActiveRecord::Base.connection.supports_migrations? def test_schema_info_table_name ActiveRecord::Base.table_name_prefix = "prefix_" ActiveRecord::Base.table_name_suffix = "_suffix" + Reminder.reset_table_name assert_equal "prefix_schema_info_suffix", ActiveRecord::Migrator.schema_info_table_name ActiveRecord::Base.table_name_prefix = "" ActiveRecord::Base.table_name_suffix = "" + Reminder.reset_table_name assert_equal "schema_info", ActiveRecord::Migrator.schema_info_table_name end @@ -309,6 +311,7 @@ if ActiveRecord::Base.connection.supports_migrations? assert_equal "table", ActiveRecord::Migrator.proper_table_name('table') assert_equal "table", ActiveRecord::Migrator.proper_table_name(:table) assert_equal "reminders", ActiveRecord::Migrator.proper_table_name(Reminder) + Reminder.reset_table_name assert_equal Reminder.table_name, ActiveRecord::Migrator.proper_table_name(Reminder) # Use the model's own prefix/suffix if a model is given @@ -316,17 +319,21 @@ if ActiveRecord::Base.connection.supports_migrations? ActiveRecord::Base.table_name_suffix = "_ARsuffix" Reminder.table_name_prefix = 'prefix_' Reminder.table_name_suffix = '_suffix' + Reminder.reset_table_name assert_equal "prefix_reminders_suffix", ActiveRecord::Migrator.proper_table_name(Reminder) Reminder.table_name_prefix = '' Reminder.table_name_suffix = '' + Reminder.reset_table_name # Use AR::Base's prefix/suffix if string or symbol is given ActiveRecord::Base.table_name_prefix = "prefix_" ActiveRecord::Base.table_name_suffix = "_suffix" + Reminder.reset_table_name assert_equal "prefix_table_suffix", ActiveRecord::Migrator.proper_table_name('table') assert_equal "prefix_table_suffix", ActiveRecord::Migrator.proper_table_name(:table) ActiveRecord::Base.table_name_prefix = "" ActiveRecord::Base.table_name_suffix = "" + Reminder.reset_table_name end def test_add_drop_table_with_prefix_and_suffix @@ -334,6 +341,7 @@ if ActiveRecord::Base.connection.supports_migrations? ActiveRecord::Base.table_name_prefix = 'prefix_' ActiveRecord::Base.table_name_suffix = '_suffix' + Reminder.reset_table_name WeNeedReminders.up assert Reminder.create("content" => "hello world", "remind_at" => Time.now) @@ -343,6 +351,7 @@ if ActiveRecord::Base.connection.supports_migrations? assert_raises(ActiveRecord::StatementInvalid) { Reminder.find(:first) } ActiveRecord::Base.table_name_prefix = '' ActiveRecord::Base.table_name_suffix = '' + Reminder.reset_table_name end end -- cgit v1.2.3