Files
gitlab-foss/lib/gitlab/database/migration_helpers/swapping.rb
2024-09-06 09:11:14 +00:00

50 lines
1.7 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module Database
module MigrationHelpers
module Swapping
include ::Gitlab::Database::SchemaHelpers
include ::Gitlab::Database::MigrationHelpers::V2
def swap_columns(table, column1, column2)
::Gitlab::Database::Migrations::SwapColumns.new(
migration_context: self,
table: table,
column1: column1,
column2: column2
).execute
end
def swap_columns_default(table, column1, column2)
::Gitlab::Database::Migrations::SwapColumnsDefault.new(
migration_context: self,
table: table,
column1: column1,
column2: column2
).execute
end
def swap_foreign_keys(table, foreign_key1, foreign_key2)
rename_constraint(table, foreign_key1, :temp_name_for_renaming)
rename_constraint(table, foreign_key2, foreign_key1)
rename_constraint(table, :temp_name_for_renaming, foreign_key2)
end
def swap_indexes(table, index1, index2, schema: nil)
identifier = "index_#{index1}_on_#{table}"
# Check Gitlab::Database::MigrationHelpers#concurrent_foreign_key_name()
# for info on why we use a hash
hashed_identifier = Digest::SHA256.hexdigest(identifier).first(10)
temp_index = "temp_#{hashed_identifier}"
rename_index_with_schema(table, index1, temp_index, schema: schema)
rename_index_with_schema(table, index2, index1, schema: schema)
rename_index_with_schema(table, temp_index, index2, schema: schema)
end
end
end
end
end