diff --git a/lib/dm-migrations/adapters/dm-do-adapter.rb b/lib/dm-migrations/adapters/dm-do-adapter.rb index b00f0f7..8c561e7 100644 --- a/lib/dm-migrations/adapters/dm-do-adapter.rb +++ b/lib/dm-migrations/adapters/dm-do-adapter.rb @@ -239,7 +239,11 @@ def property_schema_statement(connection, schema) statement << "(#{connection.quote_value(length)})" end - statement << " DEFAULT #{connection.quote_value(schema[:default])}" if schema.key?(:default) + default = schema[:default] + if default + statement << " DEFAULT #{connection.quote_value(default)}" + end + statement << ' NOT NULL' unless schema[:allow_nil] statement diff --git a/lib/dm-migrations/sql/mysql.rb b/lib/dm-migrations/sql/mysql.rb index c61aec4..ed7afb5 100644 --- a/lib/dm-migrations/sql/mysql.rb +++ b/lib/dm-migrations/sql/mysql.rb @@ -42,31 +42,24 @@ def change_column_type_statement(name, column) end def rename_column_type_statement(table_name, old_col, new_col) - column_info = select("SHOW COLUMNS FROM #{quote_name(table_name)} LIKE ?", old_col).first + table = quote_name(table_name) + column_info = select("SHOW COLUMNS FROM #{table} LIKE ?", old_col).first + column_options = { :name => column_info.field, :primitive => column_info.type, + :serial => column_info.extra == 'auto_increment', + :allow_nil => column_info.null == 'YES', + :default => column_info.default, } - if column_info.null == 'YES' - column_options[:allow_nil] = true - column_options[:default] = column_info.default - else - column_options[:allow_nil] = false - end - - case column_info.extra - when 'auto_increment' - column_options[:serial] = true - end - column = with_connection do |connection| property_schema_statement(connection, column_options) end - column_name, column_definition = column.split(' ', 2) + column_definition = column.split(' ', 2).last - "ALTER TABLE #{quote_name(table_name)} CHANGE #{quote_name(old_col)} #{quote_name(new_col)} #{column_definition}" + "ALTER TABLE #{table} CHANGE #{quote_name(old_col)} #{quote_name(new_col)} #{column_definition}" end class Table diff --git a/spec/integration/sql_spec.rb b/spec/integration/sql_spec.rb index 2390bd4..6dc03c1 100644 --- a/spec/integration/sql_spec.rb +++ b/spec/integration/sql_spec.rb @@ -165,7 +165,7 @@ when :mysql before do # create the table so the existing column schema can be instrospected - @adapter.execute('CREATE TABLE `people` (name VARCHAR(50) NOT NULL)') + @adapter.execute("CREATE TABLE `people` (name VARCHAR(50) DEFAULT 'John' NOT NULL)") @modifier = DataMapper::Migration::TableModifier.new(@adapter, :people) do rename_column :name, :first_name @@ -177,7 +177,7 @@ end it "should change the column" do - @modifier.to_sql.should == %q{ALTER TABLE `people` CHANGE `name` `first_name` varchar(50) NOT NULL} + @modifier.to_sql.should == %q{ALTER TABLE `people` CHANGE `name` `first_name` varchar(50) DEFAULT 'John' NOT NULL} end end end