Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/database/migration_helpers/loose_foreign_key_helpers.rb')
-rw-r--r--lib/gitlab/database/migration_helpers/loose_foreign_key_helpers.rb32
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/gitlab/database/migration_helpers/loose_foreign_key_helpers.rb b/lib/gitlab/database/migration_helpers/loose_foreign_key_helpers.rb
new file mode 100644
index 00000000000..30601bffd7a
--- /dev/null
+++ b/lib/gitlab/database/migration_helpers/loose_foreign_key_helpers.rb
@@ -0,0 +1,32 @@
+# 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