feat: add sql functions

This commit is contained in:
Martin Eyben 2024-12-02 16:58:31 +00:00
parent b2aa8ca22e
commit 6f5c66fcbd
2 changed files with 39 additions and 1 deletions

View File

@ -6,7 +6,8 @@ all: build
build: \ 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)/05_functions.sql
# $(DIR_BUILD)/03_select.sql \ # $(DIR_BUILD)/03_select.sql \
# $(DIR_BUILD)/04_update.sql # $(DIR_BUILD)/04_update.sql
@ -34,6 +35,10 @@ $(DIR_BUILD)/04_update.sql: $(DIR_SRC)/update.sql
mkdir -p $(dir $@) mkdir -p $(dir $@)
cp $< $@ cp $< $@
$(DIR_BUILD)/05_functions.sql: $(DIR_SRC)/functions.sql
mkdir -p $(dir $@)
cp $< $@
clean: clean:
rm -f $(DIR_BUILD)/* .data/*.data rm -f $(DIR_BUILD)/* .data/*.data

View File

@ -0,0 +1,33 @@
DROP FUNCTION pieces_membre(integer);
CREATE OR REPLACE FUNCTION pieces_membre(int) RETURNS TABLE(id_piece int, quantite_piece int)
AS
$$
SELECT id_piece, quantite_contenir * quantite_enregistrer as quantite_pieces_possedees
FROM enregistrer
NATURAL JOIN boites
NATURAL JOIN contenir
WHERE id_membre=$1
UNION
(SELECT id_piece, quantite_acheter as quantite_pieces_possedees
FROM acheter WHERE id_membre=$1);
$$
LANGUAGE SQL;
;
-- Liste des modèles faisables à partir d'un membre
CREATE OR REPLACE FUNCTION modeles_faisables_membre(int) RETURNS TABLE(id_modele int) AS
$$
SELECT id_modele
FROM modeles
WHERE id_modele not IN
(
SELECT id_modele FROM (SELECT * FROM pieces_membre($1)) as pieces_possedees
RIGHT OUTER JOIN (SELECT id_piece as id_necessaire, quantite_necessiter, id_modele
FROM necessiter) as pieces_modeles
ON pieces_possedees.id_piece = id_necessaire
WHERE quantite_necessiter > quantite_piece OR quantite_piece IS NULL
)
$$
LANGUAGE SQL;