discourse/db/migrate/20190513143015_add_theme_id...

36 lines
1.1 KiB
Ruby

# frozen_string_literal: true
class AddThemeIdToJavascriptCache < ActiveRecord::Migration[5.2]
def up
# Delete any javascript caches with broken foreign keys
execute <<~SQL
DELETE FROM javascript_caches jc
WHERE NOT EXISTS (
SELECT 1
FROM theme_fields tf
WHERE tf.id = jc.theme_field_id
);
SQL
make_changes
execute "ALTER TABLE javascript_caches ADD CONSTRAINT enforce_theme_or_theme_field CHECK ((theme_id IS NOT NULL AND theme_field_id IS NULL) OR (theme_id IS NULL AND theme_field_id IS NOT NULL))"
end
def down
execute "ALTER TABLE javascript_caches DROP CONSTRAINT enforce_theme_or_theme_field"
revert { make_changes }
end
private
def make_changes
add_reference :javascript_caches, :theme, foreign_key: { on_delete: :cascade }
add_foreign_key :javascript_caches, :theme_fields, on_delete: :cascade
begin
Migration::SafeMigrate.disable!
change_column_null :javascript_caches, :theme_field_id, true
ensure
Migration::SafeMigrate.enable!
end
end
end