mirror of
https://github.com/discourse/discourse.git
synced 2025-04-23 05:22:01 +08:00
DEV: Allow DROP NOT NULL
in pre-deploy migrations (#20775)
Our SafeMigrate system is designed to prevent tables/columns being dropped in pre-deploy migrations. Its regex-based detection was triggering incorrectly on `ALTER COLUMN DROP NOT NULL`.
This commit is contained in:
parent
a0140f6f75
commit
7070f81596
lib/migration
spec
@ -129,7 +129,7 @@ class Migration::SafeMigrate
|
||||
in use by live applications.
|
||||
TEXT
|
||||
raise Discourse::InvalidMigration, "Attempt was made to drop a table"
|
||||
elsif sql =~ /\A\s*alter\s+table.*(?:rename|drop)\s+/i
|
||||
elsif sql =~ /\A\s*alter\s+table.*(?:rename|drop(?!\s+not\s+null))\s+/i
|
||||
$stdout.puts("", <<~TEXT)
|
||||
WARNING
|
||||
-------------------------------------------------------------------------------------
|
||||
|
11
spec/fixtures/db/migrate/drop_not_null/20990309014015_drop_not_null.rb
vendored
Normal file
11
spec/fixtures/db/migrate/drop_not_null/20990309014015_drop_not_null.rb
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class DropNotNull < ActiveRecord::Migration[5.1]
|
||||
def up
|
||||
change_column_null :users, :username, true
|
||||
end
|
||||
|
||||
def down
|
||||
raise "not tested"
|
||||
end
|
||||
end
|
@ -70,6 +70,16 @@ RSpec.describe Migration::SafeMigrate do
|
||||
expect { User.first.username }.not_to raise_error
|
||||
end
|
||||
|
||||
it "allows dropping NOT NULL" do
|
||||
Migration::SafeMigrate.enable!
|
||||
|
||||
path = File.expand_path "#{Rails.root}/spec/fixtures/db/migrate/drop_not_null"
|
||||
|
||||
output = capture_stdout { migrate_up(path) }
|
||||
|
||||
expect(output).to include("change_column_null(:users, :username, true)")
|
||||
end
|
||||
|
||||
it "supports being disabled" do
|
||||
Migration::SafeMigrate.enable!
|
||||
Migration::SafeMigrate.disable!
|
||||
|
Loading…
x
Reference in New Issue
Block a user