feat: some triggers to update a note, remove a thread in cascade, and remove a piece in cascade.

This commit is contained in:
damien DELPY 2024-12-03 11:52:49 +01:00
parent a540c522f9
commit d80f5ff534
No known key found for this signature in database
2 changed files with 64 additions and 1 deletions

View File

@ -7,9 +7,9 @@ build: \
$(DIR_BUILD)/00_drop.sql \ $(DIR_BUILD)/00_drop.sql \
$(DIR_BUILD)/01_create.sql \ $(DIR_BUILD)/01_create.sql \
$(DIR_BUILD)/02_insert.sql \ $(DIR_BUILD)/02_insert.sql \
$(DIR_BUILD)/04_update.sql \
$(DIR_BUILD)/05_functions.sql $(DIR_BUILD)/05_functions.sql
# $(DIR_BUILD)/03_select.sql \ # $(DIR_BUILD)/03_select.sql \
# $(DIR_BUILD)/04_update.sql
generate_data: generate_data:
python3 generate_data.py python3 generate_data.py

View File

@ -384,3 +384,66 @@ CREATE OR REPLACE VIEW nb_modele_par_membre AS
WHERE membres.id_membre IS NOT NULL WHERE membres.id_membre IS NOT NULL
GROUP BY membres.id_membre 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();
-- ============================================================================