33 lines
868 B
Ruby
33 lines
868 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
module Database
|
||
|
module MigrationHelpers
|
||
|
module LooseForeignKeyHelpers
|
||
|
include Gitlab::Database::SchemaHelpers
|
||
|
|
||
|
DELETED_RECORDS_INSERT_FUNCTION_NAME = 'insert_into_loose_foreign_keys_deleted_records'
|
||
|
|
||
|
def track_record_deletions(table)
|
||
|
execute(<<~SQL)
|
||
|
CREATE TRIGGER #{record_deletion_trigger_name(table)}
|
||
|
AFTER DELETE ON #{table} REFERENCING OLD TABLE AS old_table
|
||
|
FOR EACH STATEMENT
|
||
|
EXECUTE FUNCTION #{DELETED_RECORDS_INSERT_FUNCTION_NAME}();
|
||
|
SQL
|
||
|
end
|
||
|
|
||
|
def untrack_record_deletions(table)
|
||
|
drop_trigger(table, record_deletion_trigger_name(table))
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def record_deletion_trigger_name(table)
|
||
|
"#{table}_loose_fk_trigger"
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|