File: /volume1/@appstore/SynologyPhotos/etc/sql/115.sql
CREATE OR REPLACE FUNCTION public.list_cover_for_id_folders(cover_limit integer, user_id integer, id_folders int[])
RETURNS TABLE (id_folder integer, id_unit integer[], cache_key text[])
AS $$
DECLARE
folder_id integer;
id_cover integer[];
id_cover_cache_key text[];
BEGIN
FOREACH folder_id IN ARRAY id_folders
LOOP
SELECT ARRAY_AGG(id), ARRAY_AGG(subquery.cache_key) INTO id_cover, id_cover_cache_key
FROM (
SELECT id, unit.cache_key
FROM unit
WHERE unit.id_folder = folder_id AND unit.is_major = TRUE AND unit.id_user = user_id
ORDER BY id DESC
LIMIT cover_limit
) AS subquery;
RETURN QUERY SELECT folder_id, id_cover, id_cover_cache_key;
END LOOP;
END;
$$ LANGUAGE plpgsql;
DROP INDEX IF EXISTS unit_id_user_id_folder_id_desc_idx;
CREATE INDEX unit_id_user_id_folder_id_desc_idx ON unit (id_user, id_folder, id DESC);