43 lines
1.1 KiB
Ruby
43 lines
1.1 KiB
Ruby
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
|
|
# for more information on how to write migrations for GitLab.
|
|
|
|
class ReorganiseIssuesIndexesForFasterSorting < ActiveRecord::Migration
|
|
include Gitlab::Database::MigrationHelpers
|
|
|
|
# Set this constant to true if this migration requires downtime.
|
|
DOWNTIME = false
|
|
|
|
disable_ddl_transaction!
|
|
|
|
REMOVE_INDEX_COLUMNS = %i[project_id created_at due_date updated_at].freeze
|
|
|
|
ADD_INDEX_COLUMNS = [
|
|
%i[project_id created_at id state],
|
|
%i[project_id due_date id state],
|
|
%i[project_id updated_at id state]
|
|
].freeze
|
|
|
|
TABLE = :issues
|
|
|
|
def up
|
|
add_indexes(ADD_INDEX_COLUMNS)
|
|
remove_indexes(REMOVE_INDEX_COLUMNS)
|
|
end
|
|
|
|
def down
|
|
add_indexes(REMOVE_INDEX_COLUMNS)
|
|
remove_indexes(ADD_INDEX_COLUMNS)
|
|
end
|
|
|
|
def add_indexes(columns)
|
|
columns.each do |column|
|
|
add_concurrent_index(TABLE, column) unless index_exists?(TABLE, column)
|
|
end
|
|
end
|
|
|
|
def remove_indexes(columns)
|
|
columns.each do |column|
|
|
remove_concurrent_index(TABLE, column) if index_exists?(TABLE, column)
|
|
end
|
|
end
|
|
end
|