aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2008-06-27 01:06:33 -0700
committerJeremy Kemper <jeremy@bitsweat.net>2008-06-27 01:07:22 -0700
commit4498aad4acda002b8f213f13c4acd52cba04d224 (patch)
tree1aa0e6d3beb2d5d8555c91fb73068caf59896784 /activerecord/lib/active_record
parentb2b761166d28c1aba9165da76fba28027171fd2d (diff)
downloadrails-4498aad4acda002b8f213f13c4acd52cba04d224.tar.gz
rails-4498aad4acda002b8f213f13c4acd52cba04d224.tar.bz2
rails-4498aad4acda002b8f213f13c4acd52cba04d224.zip
MySQL: treat integer with :limit => 11 as a display width, not byte size, for backward-compatibility.
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb3
-rwxr-xr-xactiverecord/lib/active_record/connection_adapters/mysql_adapter.rb11
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb12
3 files changed, 15 insertions, 11 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
index 02e444d4e8..2c03de0f17 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
@@ -304,8 +304,7 @@ module ActiveRecord
#
# Available options are (none of these exists by default):
# * <tt>:limit</tt> -
- # Requests a maximum column length (<tt>:string</tt>, <tt>:text</tt>,
- # <tt>:binary</tt> or <tt>:integer</tt> columns only)
+ # Requests a maximum column length. This is number of characters for <tt>:string</tt> and <tt>:text</tt> columns and number of bytes for :binary and :integer columns.
# * <tt>:default</tt> -
# The column's default value. Use nil for NULL.
# * <tt>:null</tt> -
diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
index dd54950790..c5962764f5 100755
--- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
@@ -473,11 +473,12 @@ module ActiveRecord
return super unless type.to_s == 'integer'
case limit
- when 1; 'tinyint'
- when 2; 'smallint'
- when 3; 'mediumint'
- when 4, nil; 'int(11)'
- else; 'bigint'
+ 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
end
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
index 361d177967..2e2d50ccf4 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -48,9 +48,12 @@ module ActiveRecord
private
def extract_limit(sql_type)
- return 8 if sql_type =~ /^bigint/i
- return 2 if sql_type =~ /^smallint/i
- super
+ case sql_type
+ when /^integer/i; 4
+ when /^bigint/i; 8
+ when /^smallint/i; 2
+ else super
+ end
end
# Extracts the scale from PostgreSQL-specific data types.
@@ -795,9 +798,10 @@ module ActiveRecord
when 1..2; 'smallint'
when 3..4, nil; 'integer'
when 5..8; 'bigint'
+ else raise(ActiveRecordError, "No integer type has byte size #{limit}. Use a numeric with precision 0 instead.")
end
end
-
+
# Returns a SELECT DISTINCT clause for a given set of columns and a given ORDER BY clause.
#
# PostgreSQL requires the ORDER BY columns in the select list for distinct queries, and