File: /volume1/@appstore/SynologyPhotos/etc/sql/64.sql
CREATE OR REPLACE FUNCTION public.recalculate_person_album_item_count(user_id integer)
RETURNS VOID AS
$$
BEGIN
INSERT INTO
person_item_count (id_person, id_user, item_count)
SELECT id_person, id_user, count(DISTINCT id_item) AS item_count
FROM person_face_view
WHERE id_user = user_id AND is_major = true AND id_person IS NOT NULL
GROUP BY id_person, id_user
ON CONFLICT(id_user, id_person) DO UPDATE
SET
(id_person, id_user, item_count) = (EXCLUDED.id_person, EXCLUDED.id_user, EXCLUDED.item_count);
DELETE FROM person_item_count WHERE item_count = 0 AND id_user = user_id;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION public.recalculate_concept_album_additional(user_id integer)
RETURNS VOID AS
$$
BEGIN
UPDATE concept_album_additional set item_count = 0 WHERE id_user = user_id;
INSERT INTO
concept_album_additional (id_concept, item_count, id_user)
SELECT
id_concept, COUNT(*) as item_count, user_id as id_user
FROM
many_unit_has_many_concept m
JOIN unit on unit.id = m.id_unit
WHERE
m.id_user = user_id
AND unit.is_major
GROUP BY id_concept, m.id_user
ON CONFLICT(id_user, id_concept) DO UPDATE
SET
(id_concept, item_count, id_user) = (EXCLUDED.id_concept, EXCLUDED.item_count, EXCLUDED.id_user);
END;
$$ LANGUAGE plpgsql;