aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2016-02-12 23:49:05 +0900
committerRyuta Kamizono <kamipo@gmail.com>2016-03-08 08:51:26 +0900
commit51601f8889d08ee9336d6df9ea7598609578c40a (patch)
treed587ed0b2977f0617f59117cd2fda325c3df4daf /activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
parent70e7b87ddba726f5fd2eb7ef24b158baa8ea2193 (diff)
downloadrails-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.rb25
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