aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2012-02-27 10:21:18 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2012-02-27 10:21:18 -0800
commita19dd29e554ee9578bb7f95a35bc5712bb06ab4d (patch)
tree28f83ed288ec3ed193bbc2fd508036f013008782 /activerecord/lib/active_record
parent9ad7767aba737fc19496a5475083c45048210180 (diff)
parentfe7cacb5106cd240e4d18ae518fa4e56c7e4ec5d (diff)
downloadrails-a19dd29e554ee9578bb7f95a35bc5712bb06ab4d.tar.gz
rails-a19dd29e554ee9578bb7f95a35bc5712bb06ab4d.tar.bz2
rails-a19dd29e554ee9578bb7f95a35bc5712bb06ab4d.zip
Merge pull request #5173 from kennyj/fix_3931-2
Fix type_to_sql with text and limit on mysql/mysql2. Fix GH #3931 (Try again).
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb29
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 eec7efadc2..e33903622b 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