Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Drop constraint quota_definitions_name_key #3952

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
Sequel.migration do
up do
if self.class.name.match?(/mysql/i)
alter_table :quota_definitions do
drop_constraint :name, if_exists: true
end
elsif self.class.name.match?(/postgres/i)
alter_table :quota_definitions do
drop_constraint :quota_definitions_name_key, if_exists: true
end
end
end

down do
if self.class.name.match?(/mysql/i)
# mysql 5 is not so smart as mysql 8, prevent Mysql2::Error: Duplicate key name 'name'
alter_table :quota_definitions do
# rubocop:disable Sequel/ConcurrentIndex
drop_index :name, name: :name if @db.indexes(:quota_definitions).include?(:name)
# rubocop:enable Sequel/ConcurrentIndex
end
alter_table :quota_definitions do
add_unique_constraint :name, name: :name, if_not_exists: true
end
elsif self.class.name.match?(/postgres/i)
alter_table :quota_definitions do
add_unique_constraint :name, name: :quota_definitions_name_key, if_not_exists: true
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
require 'spec_helper'
require 'migrations/helpers/migration_shared_context'

RSpec.describe 'migration to add or remove unique constraint on name column in quota_definitions table', isolation: :truncation, type: :migration do
include_context 'migration' do
let(:migration_filename) { '20240808118000_drop_unique_constraint_quota_definitions_name_key_spec.rb' }
end
describe 'up migration' do
context 'the unique constraint on name column exists' do
it 'removes the unique constraint' do
if db.database_type == :mysql
expect(db.indexes(:quota_definitions)).to include(:name)
elsif db.database_type == :postgres
expect(db.indexes(:quota_definitions)).to include(:quota_definitions_name_key)
end
expect { Sequel::Migrator.run(db, migrations_path, target: current_migration_index, allow_missing_migration_files: true) }.not_to raise_error
if db.database_type == :mysql
expect(db.indexes(:quota_definitions)).not_to include(:name)
elsif db.database_type == :postgres
expect(db.indexes(:quota_definitions)).not_to include(:quota_definitions_name_key)
end
end

context 'the unique constraint on name column does not exist' do
it 'does not throw an error' do
expect { Sequel::Migrator.run(db, migrations_path, target: current_migration_index, allow_missing_migration_files: true) }.not_to raise_error
if db.database_type == :mysql
expect(db.indexes(:quota_definitions)).not_to include(:name)
elsif db.database_type == :postgres
expect(db.indexes(:quota_definitions)).not_to include(:quota_definitions_name_key)
end
expect { Sequel::Migrator.run(db, migrations_path, target: current_migration_index, allow_missing_migration_files: true) }.not_to raise_error
if db.database_type == :mysql
expect(db.indexes(:quota_definitions)).not_to include(:name)
elsif db.database_type == :postgres
expect(db.indexes(:quota_definitions)).not_to include(:quota_definitions_name_key)
end
end
end
end
end

describe 'down migration' do
context 'unique constraint on name column does not exist' do
before do
Sequel::Migrator.run(db, migrations_path, target: current_migration_index, allow_missing_migration_files: true)
end

it 'adds the unique constraint' do
if db.database_type == :mysql
expect(db.indexes(:quota_definitions)).not_to include(:name)
elsif db.database_type == :postgres
expect(db.indexes(:quota_definitions)).not_to include(:quota_definitions_name_key)
end
expect { Sequel::Migrator.run(db, migrations_path, target: current_migration_index - 1, allow_missing_migration_files: true) }.not_to raise_error
if db.database_type == :mysql
expect(db.indexes(:quota_definitions)).to include(:name)
elsif db.database_type == :postgres
expect(db.indexes(:quota_definitions)).to include(:quota_definitions_name_key)
end
end
end

context 'unique constraint on name column does exist' do
it 'does not fail' do
expect { Sequel::Migrator.run(db, migrations_path, target: current_migration_index - 1, allow_missing_migration_files: true) }.not_to raise_error
if db.database_type == :mysql
expect(db.indexes(:quota_definitions)).to include(:name)
elsif db.database_type == :postgres
expect(db.indexes(:quota_definitions)).to include(:quota_definitions_name_key)
end
expect { Sequel::Migrator.run(db, migrations_path, target: current_migration_index - 1, allow_missing_migration_files: true) }.not_to raise_error
if db.database_type == :mysql
expect(db.indexes(:quota_definitions)).to include(:name)
elsif db.database_type == :postgres
expect(db.indexes(:quota_definitions)).to include(:quota_definitions_name_key)
end
end
end
end
end
Loading