aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorMarcel Molina <marcel@vernix.org>2005-10-10 18:59:56 +0000
committerMarcel Molina <marcel@vernix.org>2005-10-10 18:59:56 +0000
commitd736568f41262755dc80f81b2f73d8254925e414 (patch)
treec3f5ad8468657f7433bc0547efd5ca000b601ee1 /activerecord
parent08a010eb1b0638b457e9f7c076224a93cc2be136 (diff)
downloadrails-d736568f41262755dc80f81b2f73d8254925e414.tar.gz
rails-d736568f41262755dc80f81b2f73d8254925e414.tar.bz2
rails-d736568f41262755dc80f81b2f73d8254925e414.zip
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
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/CHANGELOG2
-rwxr-xr-xactiverecord/lib/active_record/base.rb8
-rwxr-xr-xactiverecord/test/base_test.rb11
-rw-r--r--activerecord/test/migration_test.rb9
4 files changed, 29 insertions, 1 deletions
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 <michael@schuerig.de>]
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