diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2016-11-21 17:40:05 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2016-11-27 22:38:59 +0900 |
commit | 32ea84df6f4236125ea9e1f91a0685ccea2bfe4a (patch) | |
tree | 2132e21680c7d18240a39340d754623e1731490d | |
parent | 747ddd34abf34c32b04fd4ef83ed6754f4455b55 (diff) | |
download | rails-32ea84df6f4236125ea9e1f91a0685ccea2bfe4a.tar.gz rails-32ea84df6f4236125ea9e1f91a0685ccea2bfe4a.tar.bz2 rails-32ea84df6f4236125ea9e1f91a0685ccea2bfe4a.zip |
Fix that unsigned with zerofill is treated as signed
Fixes #27125.
4 files changed, 9 insertions, 2 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 64a0e22af2..08dd40080f 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,9 @@ +* Fix that unsigned with zerofill is treated as signed. + + Fixes #27125. + + *Ryuta Kamizono* + * Fix the uniqueness validation scope with a polymorphic association. *Sergey Alekseev* 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 cbbba5b1a5..98152853c2 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -693,7 +693,7 @@ module ActiveRecord def register_integer_type(mapping, key, options) # :nodoc: mapping.register_type(key) do |sql_type| - if /\bunsigned\z/.match?(sql_type) + if /\bunsigned\b/.match?(sql_type) Type::UnsignedInteger.new(options) else Type::Integer.new(options) diff --git a/activerecord/lib/active_record/connection_adapters/mysql/column.rb b/activerecord/lib/active_record/connection_adapters/mysql/column.rb index f82c556a6f..22b9df5309 100644 --- a/activerecord/lib/active_record/connection_adapters/mysql/column.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql/column.rb @@ -5,7 +5,7 @@ module ActiveRecord delegate :extra, to: :sql_type_metadata, allow_nil: true def unsigned? - /\bunsigned\z/.match?(sql_type) + !/\A(?:enum|set)\b/.match?(sql_type) && /\bunsigned\b/.match?(sql_type) end def case_sensitive? diff --git a/activerecord/test/cases/adapters/mysql2/unsigned_type_test.rb b/activerecord/test/cases/adapters/mysql2/unsigned_type_test.rb index 452f8d5ae8..59475ad177 100644 --- a/activerecord/test/cases/adapters/mysql2/unsigned_type_test.rb +++ b/activerecord/test/cases/adapters/mysql2/unsigned_type_test.rb @@ -48,6 +48,7 @@ class Mysql2UnsignedTypeTest < ActiveRecord::Mysql2TestCase t.unsigned_bigint :unsigned_bigint_t t.unsigned_float :unsigned_float_t t.unsigned_decimal :unsigned_decimal_t, precision: 10, scale: 2 + t.column :unsigned_zerofill, "int unsigned zerofill" end @connection.columns("unsigned_types").select { |c| /^unsigned_/.match?(c.name) }.each do |column| |