aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2015-09-11 22:29:28 +0900
committerRyuta Kamizono <kamipo@gmail.com>2015-09-18 23:12:36 +0900
commitb8bedfa2f26c1697dd48dca6201a591c42ccfba0 (patch)
treeff2b634565d0c1a3d71cc3e8802e2222d5244d0d /activerecord/lib/active_record/connection_adapters
parentbbf0d35bf6148752911c1da4b7449450faea8755 (diff)
downloadrails-b8bedfa2f26c1697dd48dca6201a591c42ccfba0.tar.gz
rails-b8bedfa2f26c1697dd48dca6201a591c42ccfba0.tar.bz2
rails-b8bedfa2f26c1697dd48dca6201a591c42ccfba0.zip
Reduce the calling `create_table_info` query
Currently in schema dumping, `create_table_info` query is called twice for each tables. It means if 100 tables exists, the query is called 200 times. This change is that the query is called once for each tables in schema dumping.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb9
1 files changed, 7 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
index 7b47539596..fbfc09e801 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
@@ -685,7 +685,7 @@ module ActiveRecord
AND fk.table_name = '#{table_name}'
SQL
- create_table_info = select_one("SHOW CREATE TABLE #{quote_table_name(table_name)}")["Create Table"]
+ create_table_info = create_table_info(table_name)
fk_info.map do |row|
options = {
@@ -702,7 +702,7 @@ module ActiveRecord
end
def table_options(table_name)
- create_table_info = select_one("SHOW CREATE TABLE #{quote_table_name(table_name)}")["Create Table"]
+ create_table_info = create_table_info(table_name)
# strip create_definitions and partition_options
raw_table_options = create_table_info.sub(/\A.*\n\) /m, '').sub(/\n\/\*!.*\*\/\n\z/m, '').strip
@@ -1018,6 +1018,11 @@ module ActiveRecord
end
end
+ def create_table_info(table_name) # :nodoc:
+ @create_table_info_cache = {}
+ @create_table_info_cache[table_name] ||= select_one("SHOW CREATE TABLE #{quote_table_name(table_name)}")["Create Table"]
+ end
+
def create_table_definition(name, temporary = false, options = nil, as = nil) # :nodoc:
TableDefinition.new(native_database_types, name, temporary, options, as)
end