File: /volume1/@appstore/SynologyPhotos/etc/sql/31.sql
CREATE OR REPLACE FUNCTION public.update_condition_album_time_trigger_func ()
RETURNS trigger
LANGUAGE plpgsql
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 1
AS $$
DECLARE
unit_time integer;
condition_album_table text;
max_time bigint;
min_time bigint;
record RECORD;
BEGIN
unit_time = OLD.takentime;
condition_album_table = TG_TABLE_SCHEMA || '.condition_album';
FOR record IN EXECUTE format('SELECT * FROM %s WHERE start_time = %L OR end_time = %L', condition_album_table, unit_time, unit_time) LOOP
EXECUTE format('SELECT COALESCE(max, 0), COALESCE(min, 0) FROM public.get_unit_takentime_by_condition_album(%L)', record.id) INTO max_time, min_time;
EXECUTE 'UPDATE ' || condition_album_table || ' SET start_time = ' || min_time || ', end_time = ' || max_time || ' WHERE id = ' || record.id;
END LOOP;
RETURN NULL;
END;
$$;
DROP TRIGGER IF EXISTS unit_update_takentime_cascade_to_condition_album_trigger ON public.unit CASCADE;
CREATE TRIGGER unit_update_takentime_cascade_to_condition_album_trigger
AFTER UPDATE OF takentime
ON public.unit
FOR EACH ROW
EXECUTE PROCEDURE public.update_condition_album_time_trigger_func();
DROP TRIGGER IF EXISTS update_condition_album_after_delete_unit_trigger ON public.unit CASCADE;
CREATE TRIGGER update_condition_album_after_delete_unit_trigger
AFTER DELETE
ON public.unit
FOR EACH ROW
EXECUTE PROCEDURE public.update_condition_album_time_trigger_func();