method
new_column_from_field
v8.1.1 -
Show latest stable
- Class:
ActiveRecord::ConnectionAdapters::MySQL::SchemaStatements
new_column_from_field(table_name, field, _definitions)private
No documentation available.
# File activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb, line 204
def new_column_from_field(table_name, field, _definitions)
field_name = field.fetch("Field")
type_metadata = fetch_type_metadata(field["Type"], field["Extra"])
default, default_function = field["Default"], nil
if type_metadata.type == :datetime && /\ACURRENT_TIMESTAMP(?:\([0-6]?\))?\z/.match?(default)
default = "#{default} ON UPDATE #{default}" if /on update CURRENT_TIMESTAMP/.match?(field["Extra"])
default, default_function = nil, default
elsif type_metadata.extra == "DEFAULT_GENERATED"
default = +"(#{default})" unless default.start_with?("(")
default = default.gsub("\\'", "'")
default, default_function = nil, default
elsif type_metadata.type == :text && default&.start_with?("'")
# strip and unescape quotes
default = default[1...-1].gsub("\\'", "'")
elsif default&.match?(/\A\d/)
# Its a number so we can skip the query to check if it is a function
elsif default && default_type(table_name, field_name) == :function
default, default_function = nil, default
end
MySQL::Column.new(
field["Field"],
lookup_cast_type(type_metadata.sql_type),
default,
type_metadata,
field["Null"] == "YES",
default_function,
collation: field["Collation"],
comment: field["Comment"].presence
)
end