lego/PostgreSQL/src/update.sql

352 lines
9.6 KiB
PL/PgSQL

-- ============================================================================
-- 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;
-- ============================================================================