# 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