Commit e96624b0 authored by Alexandru Croitor's avatar Alexandru Croitor

Change commit_id type on commit_user_mentions table

Change commit_id column type from binary to string.
parent a98b8302
---
title: Change commit_id type on commit_user_mentions table
merge_request: 21651
author:
type: fixed
# frozen_string_literal: true
class ChangeCommitUserMentionsCommitIdColumnType < ActiveRecord::Migration[5.2]
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
OLD_INDEX = 'commit_user_mentions_on_commit_id_and_note_id_index'
OLD_TMP_INDEX = 'temp_commit_id_and_note_id_index'
NEW_TMP_INDEX = 'temp_commit_id_for_type_change_and_note_id_index'
NEW_INDEX = 'commit_id_and_note_id_index'
def up
# the initial index name is too long and fails during migration. Renaming the index first.
add_concurrent_index :commit_user_mentions, [:commit_id, :note_id], name: OLD_TMP_INDEX
remove_concurrent_index_by_name :commit_user_mentions, OLD_INDEX
change_column_type_concurrently :commit_user_mentions, :commit_id, :string
# change_column_type_concurrently creates a new index for new column `commit_id_for_type` based on existing
# `temp_commit_id_and_note_id_index` naming it `temp_commit_id_for_type_change_and_note_id_index`, yet keeping
# `temp_commit_id_and_note_id_index` for `commit_id`, that will be cleaned
# by `cleanup_concurrent_column_type_change :commit_user_mentions, :commit_id` in a later migration.
#
# So we'll rename `temp_commit_id_for_type_change_and_note_id_index` to initialy intended name: `commit_id_and_note_id_index`.
add_concurrent_index :commit_user_mentions, [:commit_id_for_type_change, :note_id], name: NEW_INDEX
remove_concurrent_index_by_name :commit_user_mentions, NEW_TMP_INDEX
end
def down
cleanup_concurrent_column_type_change :commit_user_mentions, :commit_id
end
end
# frozen_string_literal: true
class ChangeCommitUserMentionsCommitIdColumnTypeCleanup < ActiveRecord::Migration[5.2]
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
NEW_INDEX = 'commit_id_for_type_change_and_note_id_index'
OLD_INDEX = 'commit_user_mentions_on_commit_id_and_note_id_index'
def up
cleanup_concurrent_column_type_change :commit_user_mentions, :commit_id
end
def down
change_column_type_concurrently :commit_user_mentions, :commit_id, :binary
# change_column_type_concurrently creates a new index based on existing commit_id_and_note_id_index` naming it
# `commit_id_for_type_change_and_note_id_index` so we'll rename it back to its original name.
add_concurrent_index :commit_user_mentions, [:commit_id_for_type_change, :note_id], name: OLD_INDEX
remove_concurrent_index_by_name :commit_user_mentions, NEW_INDEX
end
end
......@@ -1217,11 +1217,11 @@ ActiveRecord::Schema.define(version: 2019_12_14_175727) do
create_table "commit_user_mentions", force: :cascade do |t|
t.integer "note_id", null: false
t.binary "commit_id", null: false
t.integer "mentioned_users_ids", array: true
t.integer "mentioned_projects_ids", array: true
t.integer "mentioned_groups_ids", array: true
t.index ["commit_id", "note_id"], name: "commit_user_mentions_on_commit_id_and_note_id_index"
t.string "commit_id", null: false
t.index ["commit_id", "note_id"], name: "commit_id_and_note_id_index"
t.index ["note_id"], name: "index_commit_user_mentions_on_note_id", unique: true
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment