AR should respect default values for MySQL BINARY and VARBINARY columns.

[#1273 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
This commit is contained in:
Jatinder Singh 2009-08-09 20:43:56 -07:00 committed by Jeremy Kemper
parent 734e903af5
commit 5704ecffad
2 changed files with 36 additions and 2 deletions

@ -76,7 +76,7 @@ def self.mysql_connection(config) # :nodoc:
module ConnectionAdapters
class MysqlColumn < Column #:nodoc:
def extract_default(default)
if type == :binary || type == :text
if sql_type =~ /blob/i || type == :text
if default.blank?
return null ? nil : ''
else
@ -90,7 +90,7 @@ def extract_default(default)
end
def has_default?
return false if type == :binary || type == :text #mysql forbids defaults on blob and text columns
return false if sql_type =~ /blob/i || type == :text #mysql forbids defaults on blob and text columns
super
end

@ -33,4 +33,38 @@ def test_should_specify_not_null_if_null_option_is_false
column.limit, column.precision, column.scale, column.default, column.null)
assert_equal %Q{title varchar(20) DEFAULT 'Hello' NOT NULL}, column_def.to_sql
end
if current_adapter?(:MysqlAdapter)
def test_should_set_default_for_mysql_binary_data_types
binary_column = ActiveRecord::ConnectionAdapters::MysqlColumn.new("title", "a", "binary(1)")
assert_equal "a", binary_column.default
varbinary_column = ActiveRecord::ConnectionAdapters::MysqlColumn.new("title", "a", "varbinary(1)")
assert_equal "a", varbinary_column.default
end
def test_should_not_set_default_for_blob_and_text_data_types
assert_raise ArgumentError do
ActiveRecord::ConnectionAdapters::MysqlColumn.new("title", "a", "blob")
end
assert_raise ArgumentError do
ActiveRecord::ConnectionAdapters::MysqlColumn.new("title", "Hello", "text")
end
text_column = ActiveRecord::ConnectionAdapters::MysqlColumn.new("title", nil, "text")
assert_equal nil, text_column.default
not_null_text_column = ActiveRecord::ConnectionAdapters::MysqlColumn.new("title", nil, "text", false)
assert_equal "", not_null_text_column.default
end
def test_has_default_should_return_false_for_blog_and_test_data_types
blob_column = ActiveRecord::ConnectionAdapters::MysqlColumn.new("title", nil, "blob")
assert !blob_column.has_default?
text_column = ActiveRecord::ConnectionAdapters::MysqlColumn.new("title", nil, "text")
assert !text_column.has_default?
end
end
end