diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2015-02-23 15:36:48 -0300 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2015-02-23 15:36:48 -0300 |
commit | acb12d3f4ff80cf8cf7c6739b888e267110c6d30 (patch) | |
tree | 450cfbddabae32d42160d7eec0c5e7b41ce6377b /activerecord | |
parent | 88c3bf4c483be31bb95a6c0ad6f537a8e8aa7eee (diff) | |
parent | b8d320c1294aa582ff34e1b15782c084edc0386b (diff) | |
download | rails-acb12d3f4ff80cf8cf7c6739b888e267110c6d30.tar.gz rails-acb12d3f4ff80cf8cf7c6739b888e267110c6d30.tar.bz2 rails-acb12d3f4ff80cf8cf7c6739b888e267110c6d30.zip |
Merge pull request #17631 from kamipo/bigint_pk_support
Allow limit option for MySQL bigint primary key support.
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 15 | ||||
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb | 10 | ||||
-rw-r--r-- | activerecord/test/cases/primary_keys_test.rb | 10 |
3 files changed, 35 insertions, 0 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 131fdc62aa..51c047479f 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,18 @@ +* Allow `:limit` option for MySQL bigint primary key support. + + Example: + + create_table :foos, id: :primary_key, limit: 8 do |t| + end + + # or + + create_table :foos, id: false do |t| + t.primary_key :id, limit: 8 + end + + *Ryuta Kamizono* + * `belongs_to` will now trigger a validation error by default if the association is not present. You can turn this off on a per-association basis with `optional: true`. (Note this new default only applies to new Rails apps that will be generated with 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 8db4bcd7e3..e11eaabf4b 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -11,6 +11,16 @@ module ActiveRecord options[:auto_increment] ||= type == :bigint super end + + def new_column_definition(name, type, options) # :nodoc: + column = super + case column.type + when :primary_key + column.type = :integer + column.auto_increment = true + end + column + end end class SchemaCreation < AbstractAdapter::SchemaCreation diff --git a/activerecord/test/cases/primary_keys_test.rb b/activerecord/test/cases/primary_keys_test.rb index b45fbf0143..1ea1ef5e12 100644 --- a/activerecord/test/cases/primary_keys_test.rb +++ b/activerecord/test/cases/primary_keys_test.rb @@ -282,5 +282,15 @@ if current_adapter?(:PostgreSQLAdapter, :MysqlAdapter, :Mysql2Adapter) assert_match %r{create_table "widgets", id: :bigint}, schema end end + + if current_adapter?(:MysqlAdapter, :Mysql2Adapter) + test "primary key column type with options" do + @connection.create_table(:widgets, id: :primary_key, limit: 8, force: true) + column = @connection.columns(:widgets).find { |c| c.name == 'id' } + assert column.auto_increment? + assert_equal :integer, column.type + assert_equal 8, column.limit + end + end end end |