aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters
diff options
context:
space:
mode:
authorkennyj <kennyj@gmail.com>2012-02-26 00:35:58 +0900
committerkennyj <kennyj@gmail.com>2012-02-26 00:35:58 +0900
commitfe7cacb5106cd240e4d18ae518fa4e56c7e4ec5d (patch)
tree2045c6e4eddf98b339051b7aa9242c9e9c20d444 /activerecord/lib/active_record/connection_adapters
parent29054ba173c16d675545b719f018b28c6f8eef7e (diff)
downloadrails-fe7cacb5106cd240e4d18ae518fa4e56c7e4ec5d.tar.gz
rails-fe7cacb5106cd240e4d18ae518fa4e56c7e4ec5d.tar.bz2
rails-fe7cacb5106cd240e4d18ae518fa4e56c7e4ec5d.zip
Fix type_to_sql with text and limit on mysql/mysql2. Fix GH #3931.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters')
-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