Mahnungen: DB-Trigger zum Löschen von Verknüpfungen beim Löschen einer Mahnung
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Wed, 24 Mar 2021 13:07:07 +0000 (14:07 +0100)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Thu, 25 Mar 2021 10:22:24 +0000 (11:22 +0100)
sql/Pg-upgrade2/record_links_dunning_post_delete_trigger.sql [new file with mode: 0644]

diff --git a/sql/Pg-upgrade2/record_links_dunning_post_delete_trigger.sql b/sql/Pg-upgrade2/record_links_dunning_post_delete_trigger.sql
new file mode 100644 (file)
index 0000000..f7a097e
--- /dev/null
@@ -0,0 +1,21 @@
+-- @tag: record_links_dunning_post_delete_trigger
+-- @description: Verknüpfte Belege für Mahnungen beim Löschen entfernen
+-- @depends: release_3_5_6_1
+
+-- clean up old dangling links
+DELETE FROM record_links WHERE from_table = 'dunning' AND NOT EXISTS (SELECT id FROM dunning WHERE id = from_id);
+DELETE FROM record_links WHERE to_table   = 'dunning' AND NOT EXISTS (SELECT id FROM dunning WHERE id = to_id);
+
+-- install a trigger to delete links on delete
+CREATE OR REPLACE FUNCTION clean_up_record_links_before_dunning_delete() RETURNS trigger AS $$
+  BEGIN
+    DELETE FROM record_links
+      WHERE (from_table = 'dunning' AND from_id = OLD.id)
+         OR (to_table   = 'dunning' AND to_id   = OLD.id);
+    RETURN OLD;
+  END;
+$$ LANGUAGE plpgsql;
+
+CREATE TRIGGER before_delete_dunning_trigger
+BEFORE DELETE ON dunning FOR EACH ROW EXECUTE
+PROCEDURE clean_up_record_links_before_dunning_delete();