From d80f5ff5341fb1bd90618e4a9cc46c289f5d5541 Mon Sep 17 00:00:00 2001 From: damien DELPY Date: Tue, 3 Dec 2024 11:52:49 +0100 Subject: [PATCH] feat: some triggers to update a note, remove a thread in cascade, and remove a piece in cascade. --- PostgreSQL/Makefile | 2 +- PostgreSQL/src/create.sql | 63 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/PostgreSQL/Makefile b/PostgreSQL/Makefile index fbc01d6..d594d2c 100644 --- a/PostgreSQL/Makefile +++ b/PostgreSQL/Makefile @@ -7,9 +7,9 @@ build: \ $(DIR_BUILD)/00_drop.sql \ $(DIR_BUILD)/01_create.sql \ $(DIR_BUILD)/02_insert.sql \ + $(DIR_BUILD)/04_update.sql \ $(DIR_BUILD)/05_functions.sql # $(DIR_BUILD)/03_select.sql \ - # $(DIR_BUILD)/04_update.sql generate_data: python3 generate_data.py diff --git a/PostgreSQL/src/create.sql b/PostgreSQL/src/create.sql index 3a1a9e7..937b401 100644 --- a/PostgreSQL/src/create.sql +++ b/PostgreSQL/src/create.sql @@ -384,3 +384,66 @@ CREATE OR REPLACE VIEW nb_modele_par_membre AS WHERE membres.id_membre IS NOT NULL GROUP BY membres.id_membre ); + +-- ============================================================================ +-- Triggers. +-- ============================================================================ + +-- A noter should be between 0 and 5. +CREATE OR REPLACE FUNCTION note_veryfier() +RETURNS TRIGGER AS $$ +BEGIN + IF NEW.note_noter < 0 OR NEW.note_noter > 5 THEN + RAISE EXCEPTION 'You should give a note between 0 and 5'; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER note_veryfier +BEFORE INSERT OR UPDATE ON noter +FOR EACH ROW +EXECUTE FUNCTION note_veryfier(); + +-- To delete all the messages from a message thread. +CREATE OR REPLACE FUNCTION delete_messages_after_thread() +RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM messages WHERE id_fil = OLD.id_fil; + RETURN OLD; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER delete_messages_after_thread +AFTER DELETE ON fils +FOR EACH ROW +EXECUTE FUNCTION delete_messages_after_thread(); + +-- To remove a piece and all its dependencies. +CREATE OR REPLACE FUNCTION delete_cascade_piece() +RETURNS TRIGGER AS $$ +BEGIN + -- If this is a complex piece. + DELETE FROM etre_complexe WHERE id_piece = OLD.id_piece; + + DELETE FROM colorer WHERE id_piece = OLD.id_piece; + DELETE FROM avoir_motif WHERE id_piece = OLD.id_piece; + DELETE FROM etre_forme WHERE id_piece = OLD.id_piece; + DELETE FROM necessiter WHERE id_piece = OLD.id_piece; + DELETE FROM acheter WHERE id_piece = OLD.id_piece; + DELETE FROM perdre WHERE id_piece = OLD.id_piece; + DELETE FROM contenir WHERE id_piece = OLD.id_piece; + DELETE FROM etre WHERE id_piece = OLD.id_piece; + DELETE FROM pieces WHERE id_piece = OLD.id_piece; + + return OLD; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER delete_cascade_piece +AFTER DELETE ON pieces +FOR EACH ROW +EXECUTE FUNCTION delete_cascade_piece(); + +-- ============================================================================ +