aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorElomar França <elomar@maisweb.org>2009-09-27 13:42:13 -0300
committerJosé Valim <jose.valim@gmail.com>2010-05-16 10:45:26 +0200
commitedec1afe25014749f0e2df86d27477b45586a9e3 (patch)
treec644f7fd5170452c51c772393e7c406b402d71bc /activerecord
parent3afdfc35e8aec7e6379e093dd1278cb3de54f21b (diff)
downloadrails-edec1afe25014749f0e2df86d27477b45586a9e3.tar.gz
rails-edec1afe25014749f0e2df86d27477b45586a9e3.tar.bz2
rails-edec1afe25014749f0e2df86d27477b45586a9e3.zip
Don't carry default value when changing column for a binary type on MySQL [#3234 state:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/connection_adapters/mysql_adapter.rb6
-rw-r--r--activerecord/test/cases/migration_test.rb10
2 files changed, 15 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
index ec25bbf18e..e12924e63f 100644
--- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
@@ -513,7 +513,7 @@ module ActiveRecord
def change_column(table_name, column_name, type, options = {}) #:nodoc:
column = column_for(table_name, column_name)
- unless options_include_default?(options)
+ if has_default?(type) && !options_include_default?(options)
options[:default] = column.default
end
@@ -675,6 +675,10 @@ module ActiveRecord
end
column
end
+
+ def has_default?(sql_type)
+ sql_type =~ :binary || sql_type == :text #mysql forbids defaults on blob and text columns
+ end
end
end
end
diff --git a/activerecord/test/cases/migration_test.rb b/activerecord/test/cases/migration_test.rb
index f67344445a..41e27bd281 100644
--- a/activerecord/test/cases/migration_test.rb
+++ b/activerecord/test/cases/migration_test.rb
@@ -860,6 +860,16 @@ if ActiveRecord::Base.connection.supports_migrations?
assert_equal "Tester", Person.new.first_name
end
+ def test_change_column_type_default_should_change
+ old_columns = Person.connection.columns(Person.table_name, "#{name} Columns")
+ assert !old_columns.find { |c| c.name == 'data' }
+
+ assert_nothing_raised do
+ Person.connection.add_column "people", "data", :string, :default => ''
+ Person.connection.change_column "people", "data", :binary
+ end
+ end
+
def test_change_column_quotes_column_names
Person.connection.create_table :testings do |t|
t.column :select, :string