Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #6999: rename_table_with_null_and_default.diff

File rename_table_with_null_and_default.diff, 2.2 kB (added by manfred, 2 years ago)
  • test/migration_test.rb

    old new  
    360360      end 
    361361    end 
    362362 
     363    def test_rename_column_not_null_with_default 
     364      begin 
     365        Person.connection.add_column "people", "hair_clor", :string, :default => "Black", :null => false 
     366        Person.reset_column_information 
     367        columns = Person.connection.columns(:people) 
     368        hair_color = columns.detect { |c| c.name == "hair_clor" } 
     369        assert_equal "Black", hair_color.default 
     370        assert !hair_color.null 
     371 
     372        Person.connection.rename_column("people", "hair_clor", "hair_color") 
     373        Person.reset_column_information 
     374        columns = Person.connection.columns(:people) 
     375        hair_color = columns.detect { |c| c.name == "hair_color" } 
     376        assert_equal "Black", hair_color.default 
     377        assert !hair_color.null 
     378      ensure 
     379        Person.connection.remove_column("people", "hair_clor") rescue ActiveRecord::StatementInvalid 
     380        Person.connection.remove_column("people", "hair_color") rescue ActiveRecord::StatementInvalid 
     381      end 
     382    end 
     383 
    363384    def test_rename_table 
    364385      begin 
    365386        ActiveRecord::Base.connection.create_table :octopuses do |t| 
  • lib/active_record/connection_adapters/mysql_adapter.rb

    old new  
    374374      end 
    375375 
    376376      def rename_column(table_name, column_name, new_column_name) #:nodoc: 
    377         current_type = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Type"] 
    378         execute "ALTER TABLE #{table_name} CHANGE #{column_name} #{new_column_name} #{current_type}" 
     377        options = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'") 
     378        rename_column_sql = "ALTER TABLE #{table_name} CHANGE #{column_name} #{new_column_name} #{options["Type"]}" 
     379        add_column_options!(rename_column_sql, :default => options["Default"], :null => (options["Null"] == "YES")) 
     380        execute(rename_column_sql) 
    379381      end 
    380382 
    381383