0fc9f9d3e7
DB schema generated by a migration may look different in rails 4 and 5 (because rails 5 may use different default values). For this reason it's important to explicitly set for which rails version a migration was written for. See https://stackoverflow.com/questions/35929869/activerecordmigration-deprecation-warning-asks-for-rails-version-but-im-no/35930912#35930912
36 lines
902 B
Ruby
36 lines
902 B
Ruby
class AddGroupToTodos < ActiveRecord::Migration[4.2]
|
|
include Gitlab::Database::MigrationHelpers
|
|
|
|
DOWNTIME = false
|
|
|
|
disable_ddl_transaction!
|
|
|
|
class Todo < ActiveRecord::Base
|
|
self.table_name = 'todos'
|
|
|
|
include ::EachBatch
|
|
end
|
|
|
|
def up
|
|
add_column(:todos, :group_id, :integer) unless group_id_exists?
|
|
add_concurrent_foreign_key :todos, :namespaces, column: :group_id, on_delete: :cascade
|
|
add_concurrent_index :todos, :group_id
|
|
|
|
change_column_null :todos, :project_id, true
|
|
end
|
|
|
|
def down
|
|
remove_foreign_key_without_error(:todos, column: :group_id)
|
|
remove_concurrent_index(:todos, :group_id)
|
|
remove_column(:todos, :group_id) if group_id_exists?
|
|
|
|
Todo.where(project_id: nil).each_batch { |batch| batch.delete_all }
|
|
change_column_null :todos, :project_id, false
|
|
end
|
|
|
|
private
|
|
|
|
def group_id_exists?
|
|
column_exists?(:todos, :group_id)
|
|
end
|
|
end
|