File: /volume1/@appstore/SynologyPhotos/etc/sql/26.sql
ALTER TABLE public.metadata
ADD COLUMN rating smallint NOT NULL DEFAULT 0;
ALTER TABLE one_filter_has_many_unit
ADD COLUMN IF NOT EXISTS id_rating smallint NOT NULL DEFAULT 0;
CREATE OR REPLACE FUNCTION public.update_one_filter_has_many_unit_func ()
RETURNS trigger
LANGUAGE plpgsql
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 1
AS $$
DECLARE
one_filter_has_many_unit_table text;
target_column text;
filter_type text;
BEGIN
filter_type = COALESCE(NEW.filter_type, OLD.filter_type);
IF (filter_type IN (
'aperture',
'camera',
'exposure_time',
'flash',
'focal_length',
'folder',
'iso',
'item_type',
'lens',
'takentime',
'rating'
))
THEN
one_filter_has_many_unit_table = TG_TABLE_SCHEMA || '.one_filter_has_many_unit';
target_column = 'id_' || filter_type;
IF (TG_OP = 'INSERT') THEN
EXECUTE format('INSERT INTO %s (id_unit, %s, id_user) VALUES (%L, %L, %L) ON CONFLICT (id_unit) DO UPDATE SET %s = %L', one_filter_has_many_unit_table, target_column, NEW.id_unit, NEW.id_filter, NEW.id_user, target_column, NEW.id_filter);
ELSIF (TG_OP = 'DELETE') THEN
IF (filter_type IN ('rating')) THEN
EXECUTE format('UPDATE %s SET %s = 0 WHERE id_unit = %L', one_filter_has_many_unit_table, target_column, OLD.id_unit);
ELSE
EXECUTE format('UPDATE %s SET %s = NULL WHERE id_unit = %L', one_filter_has_many_unit_table, target_column, OLD.id_unit);
END IF;
ELSIF (TG_OP = 'UPDATE') THEN
EXECUTE format('UPDATE %s SET %s = %L WHERE id_unit = %L AND id_user = %L', one_filter_has_many_unit_table, target_column, NEW.id_filter, NEW.id_unit, NEW.id_user);
END IF;
END IF;
RETURN NULL;
END;
$$;