def change_column(table_name, column_name, type, options = {})
if options.include?(:null)
if options.delete(:null) == false
execute "ALTER TABLE #{table_name} ALTER COLUMN #{column_name} NOT NULL"
else
execute "ALTER TABLE #{table_name} ALTER COLUMN #{column_name} NULL"
end
end
unless options.empty?
begin
execute "ALTER TABLE #{table_name} ALTER COLUMN #{column_name} SET DATA TYPE #{type_to_sql(type, options[:limit])}"
rescue
transaction do
temp_new_column_name = "#{column_name}_newtype"
add_column table_name, temp_new_column_name, type, options
execute "UPDATE #{table_name} SET #{temp_new_column_name} = CAST(#{column_name} AS #{type_to_sql(type, options[:limit])})"
remove_column table_name, column_name
rename_column table_name, temp_new_column_name, column_name
end
end
end
end