aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/mysql/schema_dumper.rb
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2017-10-15 20:18:12 +0900
committerRyuta Kamizono <kamipo@gmail.com>2017-10-15 20:43:38 +0900
commit9493d4553569118b2a85da84fd3a8ba2b5b2de76 (patch)
tree8e7c221b830c31f7f7c405dc9257db80d8b0224a /activerecord/lib/active_record/connection_adapters/mysql/schema_dumper.rb
parenta92e4bfff31dd862e842bd68ddd78f3db720b3a4 (diff)
downloadrails-9493d4553569118b2a85da84fd3a8ba2b5b2de76.tar.gz
rails-9493d4553569118b2a85da84fd3a8ba2b5b2de76.tar.bz2
rails-9493d4553569118b2a85da84fd3a8ba2b5b2de76.zip
MySQL: Don't lose `auto_increment: true` in the `db/schema.rb`
Currently `AUTO_INCREMENT` is implicitly used in the default primary key definition. But `AUTO_INCREMENT` is not only used for single column primary key, but also for composite primary key. In that case, `auto_increment: true` should be dumped explicitly in the `db/schema.rb`. Fixes #30894.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/mysql/schema_dumper.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/mysql/schema_dumper.rb7
1 files changed, 7 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/mysql/schema_dumper.rb b/activerecord/lib/active_record/connection_adapters/mysql/schema_dumper.rb
index 95eb77aea4..d23178e43c 100644
--- a/activerecord/lib/active_record/connection_adapters/mysql/schema_dumper.rb
+++ b/activerecord/lib/active_record/connection_adapters/mysql/schema_dumper.rb
@@ -8,6 +8,7 @@ module ActiveRecord
def prepare_column_options(column)
spec = super
spec[:unsigned] = "true" if column.unsigned?
+ spec[:auto_increment] = "true" if column.auto_increment?
if @connection.supports_virtual_columns? && column.virtual?
spec[:as] = extract_expression_for_virtual_column(column)
@@ -18,6 +19,12 @@ module ActiveRecord
spec
end
+ def column_spec_for_primary_key(column)
+ spec = super
+ spec.delete(:auto_increment) if column.type == :integer && column.auto_increment?
+ spec
+ end
+
def default_primary_key?(column)
super && column.auto_increment? && !column.unsigned?
end