352 lines
9.6 KiB
PL/PgSQL
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;
|
|
|
|
-- ============================================================================
|
|
|