diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2016-02-12 23:49:05 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2016-03-08 08:51:26 +0900 |
commit | 51601f8889d08ee9336d6df9ea7598609578c40a (patch) | |
tree | d587ed0b2977f0617f59117cd2fda325c3df4daf /activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb | |
parent | 70e7b87ddba726f5fd2eb7ef24b158baa8ea2193 (diff) | |
download | rails-51601f8889d08ee9336d6df9ea7598609578c40a.tar.gz rails-51601f8889d08ee9336d6df9ea7598609578c40a.tar.bz2 rails-51601f8889d08ee9336d6df9ea7598609578c40a.zip |
Initialize `column.table_name` immediately for `column.serial?` correctly working
Currently the results of `column.serial?` is not correct. For
`column.serial?` correctly working, initialize `column.table_name`
immediately.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb | 25 |
1 files changed, 16 insertions, 9 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 50f461b746..4bb2672bab 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -421,15 +421,16 @@ module ActiveRecord # Returns an array of +Column+ objects for the table specified by +table_name+. def columns(table_name) # :nodoc: - sql = "SHOW FULL FIELDS FROM #{quote_table_name(table_name)}" - execute_and_free(sql, 'SCHEMA') do |result| - each_hash(result).map do |field| - type_metadata = fetch_type_metadata(field[:Type], field[:Extra]) - if type_metadata.type == :datetime && field[:Default] == "CURRENT_TIMESTAMP" - new_column(field[:Field], nil, type_metadata, field[:Null] == "YES", field[:Default], field[:Collation]) - else - new_column(field[:Field], field[:Default], type_metadata, field[:Null] == "YES", nil, field[:Collation]) - end + table_name = table_name.to_s + column_definitions(table_name).map do |field| + type_metadata = fetch_type_metadata(field[:Type], field[:Extra]) + if type_metadata.type == :datetime && field[:Default] == "CURRENT_TIMESTAMP" + default, default_function = nil, field[:Default] + else + default, default_function = field[:Default], nil + end + new_column(field[:Field], default, type_metadata, field[:Null] == "YES", default_function, field[:Collation]).tap do |column| + column.instance_variable_set(:@table_name, table_name) end end end @@ -874,6 +875,12 @@ module ActiveRecord @connection.query "SET #{encoding} #{variable_assignments}" end + def column_definitions(table_name) # :nodoc: + execute_and_free("SHOW FULL FIELDS FROM #{quote_table_name(table_name)}", 'SCHEMA') do |result| + each_hash(result) + end + end + def extract_foreign_key_action(structure, name, action) # :nodoc: if structure =~ /CONSTRAINT #{quote_column_name(name)} FOREIGN KEY .* REFERENCES .* ON #{action} (CASCADE|SET NULL|RESTRICT)/ case $1 |