File: /volume1/@appstore/SynologyPhotos/etc/sql/57.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);
DELETE FROM person_item_count WHERE item_count = 0 AND id_user = user_id;
END;
$$ LANGUAGE plpgsql;
CREATE INDEX id_cluster_idx ON public.person_group (id_cluster);
CREATE OR REPLACE FUNCTION public.delete_redundant_person_data(user_id integer)
RETURNS VOID AS
$$
BEGIN
DELETE FROM person_group
WHERE id_user = user_id AND
NOT EXISTS (SELECT 1 FROM face WHERE face.id_person_group = person_group.id);
DELETE FROM cluster
WHERE id_user = user_id AND
NOT EXISTS (SELECT 1 FROM person_group WHERE person_group.id_cluster = cluster.id);
DELETE FROM person
WHERE id_user = user_id AND
NOT EXISTS (SELECT 1 FROM cluster WHERE cluster.id_person = person.id);
END;
$$ LANGUAGE plpgsql;