From 86c6fedb3067326f1c8f2c41701596812c4894c9 Mon Sep 17 00:00:00 2001 From: damien DELPY Date: Tue, 26 Nov 2024 23:03:31 +0100 Subject: [PATCH] feat: first version of update.sql done to do basic manipulation to it. --- PostgreSQL/src/update.sql | 343 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 343 insertions(+) diff --git a/PostgreSQL/src/update.sql b/PostgreSQL/src/update.sql index 1ceaaff..76d23bc 100644 --- a/PostgreSQL/src/update.sql +++ b/PostgreSQL/src/update.sql @@ -2,7 +2,350 @@ -- Those are the requests to update the database. -- ============================================================================ +-- Verifying functions. +CREATE OR REPLACE FUNCTION is_existing_piece( + toadd_id_piece INT +) RETURNS VOID AS $$ +BEGIN + + IF NOT EXISTS(SELECT 1 FROM etre WHERE id_piece = toadd_id_piece) THEN + RAISE NOTICE 'The % piece does not exist.', toadd_id_piece; + RETURN; + END IF; + +END; $$ +LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION is_existing_marque( + toadd_id_marque INT +) RETURNS VOID AS $$ +BEGIN + + IF NOT EXISTS( + SELECT 1 FROM marques + WHERE id_marque = toadd_id_marque + ) + THEN + RAISE NOTICE 'The % marque does not exist.', toadd_id_marque; + RETURN; + END IF; + +END; $$ +LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION is_existing_note( + toadd_id_modele INT, + toadd_id_membre INT +) RETURNS VOID AS $$ +BEGIN + + IF NOT EXISTS( + SELECT 1 FROM noter + WHERE id_modele = toadd_id_modele + AND id_membre = toadd_id_membre + ) + THEN + RAISE NOTICE 'The notes does not exist.'; + RETURN; + END IF; + +END; $$ +LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION is_existing_membre( + toadd_id_membre INT +) RETURNS VOID AS $$ +BEGIN + + IF NOT EXISTS(SELECT 1 FROM membres WHERE id_membre = toadd_id_membre) THEN + RAISE NOTICE 'The % membre does not exist.', toadd_id_membre; + RETURN; + END IF; + +END; $$ +LANGUAGE plpgsql; + +-- To add/remove a piece. + +CREATE OR REPLACE FUNCTION add_piece( + toadd_id_piece INT, + toadd_id_couleur INT, + toadd_id_forme INT, + toadd_id_marque INT +) RETURNS VOID AS $$ +BEGIN + -- If the piece is already in the database, do nothing. + IF EXISTS(SELECT 1 FROM etre WHERE id_piece = toadd_id_piece) THEN + RAISE NOTICE 'The % piece is already in the db.', toadd_id_piece; + RETURN; + END IF; + + INSERT INTO pieces VALUES (toadd_id_piece); + INSERT INTO etre VALUES (toadd_id_piece, toadd_id_marque); + INSERT INTO colorer VALUES (toadd_id_piece, toadd_id_couleur); + INSERT INTO etre_forme VALUES (toadd_id_forme, toadd_id_piece); + +END; $$ +LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION remove_piece( + torem_id_piece INT +) RETURNS VOID AS $$ +BEGIN + -- If the piece does not exist. + SELECT is_existing_piece(torem_id_piece); + + -- If the piece is complex. + IF EXISTS(SELECT 1 FROM etre_complexe WHERE id_piece = torem_id_piece) THEN + DELETE FROM piece_complexe WHERE id_piece_complexe IN ( + SELECT id_piece_complexe + FROM etre_complexe + WHERE id_piece = torem_id_piece + ); + + DELETE FROM etre_complexe WHERE id_piece = torem_id_piece; + END IF; + + DELETE FROM colorer WHERE id_piece = torem_id_piece; + DELETE FROM avoir_motif WHERE id_piece = torem_id_piece; + DELETE FROM etre_forme WHERE id_piece = torem_id_piece; + DELETE FROM necessiter WHERE id_piece = torem_id_piece; + DELETE FROM acheter WHERE id_piece = torem_id_piece; + DELETE FROM perdre WHERE id_piece = torem_id_piece; + DELETE FROM contenir WHERE id_piece = torem_id_piece; + DELETE FROM etre WHERE id_piece = torem_id_piece; + DELETE FROM pieces WHERE id_piece = torem_id_piece; + + RAISE NOTICE '% piece sucessfully removed.', torem_id_piece; + +END; $$ +LANGUAGE plpgsql; + +-- To add a complex piece. + +CREATE OR REPLACE FUNCTION add_piece_comp( + toadd_id_piece INT, + toadd_id_piece_comp INT, + toadd_id_couleur INT, + toadd_id_forme INT, + toadd_id_marque INT +) RETURNS VOID AS $$ +BEGIN + -- If the piece is already complex. + IF EXISTS( + SELECT 1 FROM etre_complexe + WHERE id_piece_complexe = toadd_id_piece_comp + ) THEN + RAISE NOTICE 'The % piece is already in the db.', toadd_id_piece; + RETURN; + END IF; + + -- If the piece is already in the database, do nothing. + IF EXISTS(SELECT 1 FROM etre WHERE id_piece = toadd_id_piece) THEN + RAISE NOTICE 'The % piece is already in the db.', toadd_id_piece; + RETURN; + END IF; + + INSERT INTO pieces VALUES (toadd_id_piece); + INSERT INTO piece_complexes VALUES (toadd_id_piece_comp); + INSERT INTO etre VALUES (toadd_id_piece, toadd_id_marque); + INSERT INTO etre_complexe VALUES (toadd_id_piece, toadd_id_piece_comp); + INSERT INTO colorer VALUES (toadd_id_piece, toadd_id_couleur); + INSERT INTO etre_forme VALUES (toadd_id_forme, toadd_id_piece); + +END; $$ +LANGUAGE plpgsql; + +-- To add/remove a member. + +CREATE OR REPLACE FUNCTION add_membre( + toadd_id_membre INT, + toadd_nom_membre TEXT +) RETURNS VOID AS $$ +BEGIN + -- If the member is already in the database, do nothing. + IF EXISTS(SELECT 1 FROM membres WHERE id_membre = toadd_id_membre) THEN + RAISE NOTICE 'The % member is already in the db.', toadd_id_membre; + RETURN; + END IF; + + INSERT INTO membres VALUES (toadd_id_membre, toadd_nom_membre); + +END; $$ +LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION remove_membre( + torem_id_membre INT +) RETURNS VOID AS $$ +BEGIN + -- If the membre does not exist. + SELECT is_existing_membre(torem_id_membre); + + DELETE FROM acheter WHERE id_membre = torem_id_membre; + DELETE FROM enregister WHERE id_membre = torem_id_membre; + DELETE FROM messages WHERE id_membre = torem_id_membre; + DELETE FROM modeles WHERE id_membre = torem_id_membre; + DELETE FROM noter WHERE id_membre = torem_id_membre; + DELETE FROM perdre WHERE id_membre = torem_id_membre; + DELETE FROM membres WHERE id_membre = torem_id_membre; + + RAISE NOTICE '% membre sucessfully removed.', torem_id_membre; + +END; $$ +LANGUAGE plpgsql; + +-- To add/remove messages. + +CREATE OR REPLACE FUNCTION add_message( + toadd_id_message INT, + toadd_contenu TEXT, + toadd_id_membre INT, + toadd_id_fil INT, + toadd_id_message_2 INT DEFAULT NULL +) RETURNS VOID AS $$ +BEGIN + -- If the message is already in the database, do nothing. + IF EXISTS(SELECT 1 FROM messages WHERE id_message = toadd_id_message) THEN + RAISE NOTICE 'The % message is already in the db.', toadd_id_message; + RETURN; + END IF; + + -- To verify if the member exists. + IF NOT EXISTS(SELECT 1 FROM membres WHERE id_membre = toadd_id_membre) THEN + RAISE NOTICE 'The % membre does not exist.', toadd_id_membre; + RETURN; + END IF; + + -- To verify if the fil exists. + IF NOT EXISTS(SELECT 1 FROM fils WHERE id_fil = toadd_id_fil) THEN + RAISE NOTICE 'The % fil does not exist.', toadd_id_fil; + RETURN; + END IF; + + INSERT INTO messages VALUES ( + toadd_id_message, + toadd_contenu, + toadd_id_membre, + toadd_id_fil, + toadd_id_message_2 + ); + +END; $$ +LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION remove_message( + torem_id_message INT +) RETURNS VOID AS $$ +BEGIN + + -- If the message does not exist. + IF NOT EXISTS( + SELECT 1 FROM messages + WHERE id_messages = torem_id_messages + ) + THEN + RAISE NOTICE 'The % message does not exist.', torem_id_message; + RETURN; + END IF; + + DELETE FROM messages WHERE id_message = torem_id_message; + + RAISE NOTICE '% message sucessfully removed.', torem_id_message; + +END; $$ +LANGUAGE plpgsql; + +-- To change the name of a brand. + +CREATE OR REPLACE FUNCTION change_brand_name( + toadd_id_marque INT, + toadd_nom_marque TEXT +) RETURNS VOID AS $$ +BEGIN + + -- If the marque does not exist. + SELECT is_existing_marque(toadd_id_marque); + + UPDATE marques + SET nom_marque = toadd_nom_marque + WHERE id_marque = toadd_id_marque; + + RAISE NOTICE '% marque sucessfully changed.', toadd_id_marque; + +END; $$ +LANGUAGE plpgsql; + + +-- To change a notes. + +CREATE OR REPLACE FUNCTION change_note( + toadd_id_modele INT, + toadd_id_membre INT, + toadd_note TEXT +) RETURNS VOID AS $$ +BEGIN + + -- If the notes do not exist. + SELECT is_existing_note(toadd_id_modele, toadd_id_membre); + + UPDATE noter + SET note_noter = toadd_note + WHERE id_modele = toadd_id_modele + AND id_membre = toadd_id_membre; + + RAISE NOTICE 'Notes sucessfully changed'; + +END; $$ +LANGUAGE plpgsql; + +-- To add the pieces of a set to a member possession. + +CREATE OR REPLACE FUNCTION add_pieces_to_member( + toadd_id_membre INT, + toadd_id_boite INT +) RETURNS VOID AS $$ +DECLARE + var_id_piece INT; + var_quantite INT; +BEGIN + -- If the membre does not exist. + SELECT is_existing_piece(torem_id_membre); + + -- If the piece does not exist. + SELECT is_existing_piece(torem_id_piece); + + FOR var_id_piece, var_quantite IN + SELECT id_piece, quantite + FROM contenir + WHERE id_boite = toadd_id_boite + LOOP + + IF EXISTS(SELECT 1 FROM acheter + WHERE id_membre = toadd_id_membre + AND id_piece = toadd_id_piece) + THEN + + UPDATE acheter + SET quantite = quantite + var_quantite + WHERE id_membre = toadd_id_membre AND id_piece = toadd_id_piece; + + ELSE + + INSERT INTO acheter VALUES ( + toadd_id_membre, + var_id_piece, + var_quantite + ); + + END IF; + + END LOOP; + + RAISE NOTICE 'Pieces sucessfully added.'; + +END; $$ +LANGUAGE plpgsql; -- ============================================================================