File: /volume1/@appstore/SynologyPhotos/etc/sql/50.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
person.id AS id_person,
user_id as id_user,
(
SELECT
COUNT(DISTINCT(id_item))
FROM
person_face_view
WHERE
id_user = user_id
AND id_person = person.id
AND is_major
) as item_count
FROM
person
WHERE
id_user = user_id
ON CONFLICT(id_user, id_person) DO UPDATE
SET
(id_person, id_user, item_count) = (EXCLUDED.id_person, EXCLUDED.id_user, EXCLUDED.item_count);
END;
$$ LANGUAGE plpgsql;
DELETE FROM person_item_count WHERE id_person NOT IN (SELECT id FROM person);
ALTER TABLE
public.person_item_count
ADD
CONSTRAINT person_fk FOREIGN KEY (id_person) REFERENCES public.person (id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE;
DROP TRIGGER IF EXISTS delete_person_item_count_trigger ON public.face CASCADE;
DROP FUNCTION IF EXISTS public.delete_person_item_count_func() CASCADE;