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
This commit is contained in:
Marcel Molina 2005-10-10 18:59:56 +00:00
parent 08a010eb1b
commit d736568f41
4 changed files with 29 additions and 1 deletions

@ -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 <michael@schuerig.de>]

@ -552,7 +552,13 @@ def serialized_attributes
# 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

@ -296,31 +296,42 @@ def test_table_name_guesses
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

@ -299,9 +299,11 @@ def test_migrator_going_down_due_to_version_target
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 @@ def test_proper_table_name
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 @@ def test_proper_table_name
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 @@ def test_add_drop_table_with_prefix_and_suffix
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 @@ def test_add_drop_table_with_prefix_and_suffix
assert_raises(ActiveRecord::StatementInvalid) { Reminder.find(:first) }
ActiveRecord::Base.table_name_prefix = ''
ActiveRecord::Base.table_name_suffix = ''
Reminder.reset_table_name
end
end