diff options
author | kennyj <kennyj@gmail.com> | 2012-02-26 00:35:58 +0900 |
---|---|---|
committer | kennyj <kennyj@gmail.com> | 2012-02-29 01:23:37 +0900 |
commit | f1f2e8c80b0aba539def45d02e9f6a499989ca10 (patch) | |
tree | 6cb83c3ad54a3c2fb66c3f91c32b8ff53a71904f /activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb | |
parent | 72ae0b4b07ed053007460bab81d710a29624a9a7 (diff) | |
download | rails-f1f2e8c80b0aba539def45d02e9f6a499989ca10.tar.gz rails-f1f2e8c80b0aba539def45d02e9f6a499989ca10.tar.bz2 rails-f1f2e8c80b0aba539def45d02e9f6a499989ca10.zip |
Fix type_to_sql with text and limit on mysql/mysql2. Fix GH #3931.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb | 29 |
1 files changed, 20 insertions, 9 deletions
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 729e20d707..d3f5600119 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -484,15 +484,26 @@ module ActiveRecord # Maps logical Rails types to MySQL-specific data types. def type_to_sql(type, limit = nil, precision = nil, scale = nil) - return super unless type.to_s == 'integer' - - case limit - when 1; 'tinyint' - when 2; 'smallint' - when 3; 'mediumint' - when nil, 4, 11; 'int(11)' # compatibility with MySQL default - when 5..8; 'bigint' - else raise(ActiveRecordError, "No integer type has byte size #{limit}") + case type.to_s + when 'integer' + case limit + when 1; 'tinyint' + when 2; 'smallint' + when 3; 'mediumint' + when nil, 4, 11; 'int(11)' # compatibility with MySQL default + when 5..8; 'bigint' + else raise(ActiveRecordError, "No integer type has byte size #{limit}") + end + when 'text' + case limit + when 0..0xff; 'tinytext' + when nil, 0x100..0xffff; 'text' + when 0x10000..0xffffff; 'mediumtext' + when 0x1000000..0xffffffff; 'longtext' + else raise(ActiveRecordError, "No text type has character length #{limit}") + end + else + super end end |