aboutsummaryrefslogtreecommitdiffstats
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
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.
-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