gitlab-org--gitlab-foss/db/migrate/20191008180203_add_issuable...

76 lines
3.4 KiB
Ruby

# frozen_string_literal: true
class AddIssuableStateIdIndexes < ActiveRecord::Migration[5.2]
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
def up
# Creates the same indexes that are currently using state:string column
# for issues and merge_requests tables
create_indexes_for_issues
create_indexes_for_merge_requests
end
def down
# Removes indexes for issues
remove_concurrent_index_by_name :issues, 'idx_issues_on_state_id'
remove_concurrent_index_by_name :issues, 'idx_issues_on_project_id_and_created_at_and_id_and_state_id'
remove_concurrent_index_by_name :issues, 'idx_issues_on_project_id_and_due_date_and_id_and_state_id'
remove_concurrent_index_by_name :issues, 'idx_issues_on_project_id_and_rel_position_and_state_id_and_id'
remove_concurrent_index_by_name :issues, 'idx_issues_on_project_id_and_updated_at_and_id_and_state_id'
# Removes indexes from merge_requests
remove_concurrent_index_by_name :merge_requests, 'idx_merge_requests_on_id_and_merge_jid'
remove_concurrent_index_by_name :merge_requests, 'idx_merge_requests_on_source_project_and_branch_state_opened'
remove_concurrent_index_by_name :merge_requests, 'idx_merge_requests_on_state_id_and_merge_status'
remove_concurrent_index_by_name :merge_requests, 'idx_merge_requests_on_target_project_id_and_iid_opened'
end
def create_indexes_for_issues
add_concurrent_index :issues, :state_id, name: 'idx_issues_on_state_id'
add_concurrent_index :issues,
[:project_id, :created_at, :id, :state_id],
name: 'idx_issues_on_project_id_and_created_at_and_id_and_state_id'
add_concurrent_index :issues,
[:project_id, :due_date, :id, :state_id],
where: 'due_date IS NOT NULL',
name: 'idx_issues_on_project_id_and_due_date_and_id_and_state_id'
add_concurrent_index :issues,
[:project_id, :relative_position, :state_id, :id],
order: { id: :desc },
name: 'idx_issues_on_project_id_and_rel_position_and_state_id_and_id'
add_concurrent_index :issues,
[:project_id, :updated_at, :id, :state_id],
name: 'idx_issues_on_project_id_and_updated_at_and_id_and_state_id'
end
def create_indexes_for_merge_requests
add_concurrent_index :merge_requests,
[:id, :merge_jid],
where: 'merge_jid IS NOT NULL and state_id = 4',
name: 'idx_merge_requests_on_id_and_merge_jid'
add_concurrent_index :merge_requests,
[:source_project_id, :source_branch],
where: 'state_id = 1',
name: 'idx_merge_requests_on_source_project_and_branch_state_opened'
add_concurrent_index :merge_requests,
[:state_id, :merge_status],
where: "state_id = 1 AND merge_status = 'can_be_merged'",
name: 'idx_merge_requests_on_state_id_and_merge_status'
add_concurrent_index :merge_requests,
[:target_project_id, :iid],
where: 'state_id = 1',
name: 'idx_merge_requests_on_target_project_id_and_iid_opened'
end
end