feat(db): add recursive function to add tags to file including autotags

This commit is contained in:
Masahiko AMANO 2025-07-04 02:32:47 +03:00
parent 912c7b80a3
commit dbc34a8e0d

View File

@ -80,6 +80,35 @@ CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public;
COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)'; COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)';
--
-- Name: add_file_to_tag_recursive(uuid, uuid); Type: FUNCTION; Schema: data; Owner: -
--
CREATE FUNCTION data.add_file_to_tag_recursive(f_id uuid, t_id uuid) RETURNS SETOF uuid
LANGUAGE plpgsql
AS $$
DECLARE
tmp uuid;
tt_id uuid;
ttt_id uuid;
BEGIN
INSERT INTO data.file_tag VALUES (f_id, t_id) ON CONFLICT DO NOTHING RETURNING tag_id INTO tmp;
IF tmp IS NULL THEN
RETURN;
END IF;
RETURN NEXT t_id;
FOR tt_id IN
SELECT a.add_tag_id FROM data.autotags a WHERE a.trigger_tag_id=t_id AND a.is_active
LOOP
FOR ttt_id IN SELECT data.add_file_to_tag_recursive(f_id, tt_id)
LOOP
RETURN NEXT ttt_id;
END LOOP;
END LOOP;
END;
$$;
-- --
-- Name: uuid_extract_timestamp(uuid); Type: FUNCTION; Schema: public; Owner: - -- Name: uuid_extract_timestamp(uuid); Type: FUNCTION; Schema: public; Owner: -
-- --
@ -267,7 +296,7 @@ CREATE TABLE data.autotags (
CREATE TABLE data.categories ( CREATE TABLE data.categories (
id uuid DEFAULT public.uuid_v7() NOT NULL, id uuid DEFAULT public.uuid_v7() NOT NULL,
name character varying(256) NOT NULL, name character varying(256) NOT NULL,
notes text, notes text DEFAULT ''::text NOT NULL,
color character(6), color character(6),
creator_id smallint NOT NULL creator_id smallint NOT NULL
); );