diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2018-10-25 10:11:31 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2018-10-25 18:11:22 +0900 |
commit | a2ad8f456e29f760f78333e14474868a63a22a6f (patch) | |
tree | 1f3ce3dd0c1387a4a083e444527f8f1c6de8f861 /activerecord/lib/active_record/connection_adapters/mysql | |
parent | d496055b5b75387136bcdd1cc93aeab14dbda606 (diff) | |
download | rails-a2ad8f456e29f760f78333e14474868a63a22a6f.tar.gz rails-a2ad8f456e29f760f78333e14474868a63a22a6f.tar.bz2 rails-a2ad8f456e29f760f78333e14474868a63a22a6f.zip |
Support default expression for MySQL
MySQL 8.0.13 and higher supports default value to be a function or
expression.
https://dev.mysql.com/doc/refman/8.0/en/create-table.html
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/mysql')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb index 65e9a1fda5..4894fd1c08 100644 --- a/activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb @@ -106,10 +106,13 @@ module ActiveRecord def new_column_from_field(table_name, field) type_metadata = fetch_type_metadata(field[:Type], field[:Extra]) - if type_metadata.type == :datetime && /\ACURRENT_TIMESTAMP(?:\([0-6]?\))?\z/i.match?(field[:Default]) - default, default_function = nil, field[:Default] - else - default, default_function = field[:Default], nil + default, default_function = field[:Default], nil + + if type_metadata.type == :datetime && /\ACURRENT_TIMESTAMP(?:\([0-6]?\))?\z/i.match?(default) + default, default_function = nil, default + elsif type_metadata.extra == "DEFAULT_GENERATED" + default = +"(#{default})" unless default.start_with?("(") + default, default_function = nil, default end MySQL::Column.new( |