HEX
Server: Apache/2.4.63 (Unix)
System: Linux Synopilou92 4.4.302+ #72806 SMP Mon Jul 21 23:16:00 CST 2025 x86_64
User: pilou92 (1026)
PHP: 8.0.30
Disabled: NONE
Upload Files
File: /volume1/@appstore/SynologyPhotos/etc/sql/147.sql
CREATE OR REPLACE FUNCTION public.update_filter_with_conflict_delete(p_old_id_filter INTEGER, p_new_id_filter INTEGER, p_id_user INTEGER, p_max_id_unit INTEGER, p_filter_type TEXT)
RETURNS void
LANGUAGE plpgsql
AS $$
BEGIN
    -- remove conflict rows first
    DELETE FROM filter f
    USING filter conflict
    WHERE
        f.filter_type = p_filter_type
        AND f.id_user = p_id_user
        AND f.id_filter = p_old_id_filter
        AND f.id_unit <= p_max_id_unit
        AND conflict.id_unit     = f.id_unit
        AND conflict.id_filter   = p_new_id_filter
        AND conflict.filter_type = f.filter_type
        AND conflict.id_user     = f.id_user
        AND conflict.ctid <> f.ctid;
    UPDATE filter
    SET id_filter = p_new_id_filter
    WHERE
        filter_type = p_filter_type
        AND id_user = p_id_user
        AND id_filter = p_old_id_filter
        AND id_unit <= p_max_id_unit;
END;
$$;
CREATE INDEX IF NOT EXISTS similar_timeline_id_item_idx ON public.similar_timeline(id_item);
CREATE OR REPLACE FUNCTION public.rename_fk_constraints(replaced_patterns text[])
RETURNS void
LANGUAGE plpgsql
AS $$
DECLARE
  r RECORD;
  new_name text;
  exists_check int;
BEGIN
  FOR r IN
    SELECT
      con.conname AS old_name,
      c.relname   AS table_name,
      n.nspname   AS schema_name
    FROM pg_constraint con
    JOIN pg_class c ON c.oid = con.conrelid
    JOIN pg_namespace n ON n.oid = c.relnamespace
    WHERE con.contype = 'f'
      AND con.conname = ANY (replaced_patterns)
  LOOP
    new_name := r.table_name || '_' || r.old_name;
    SELECT 1 INTO exists_check
    FROM pg_constraint
    WHERE conname = new_name;
    IF exists_check IS NULL THEN
      EXECUTE format(
        'ALTER TABLE %I.%I RENAME CONSTRAINT %I TO %I;',
          r.schema_name,
          r.table_name,
          r.old_name,
          new_name
      );
    END IF;
  END LOOP;
END;
$$;
SELECT rename_fk_constraints(ARRAY[
  'folder_id_user_fk',
  'album_id_user_fk'
]);
SELECT rename_fk_constraints(ARRAY[
  'id_user_fk',
  'unit_fk',
  'composite_unit_fk',
  'share_fk',
  'concept_fk',
  'user_id_fk',
  'person_fk',
  'folder_fk',
  'id_unit_fk',
  'id_task_fk',
  'unit_id_user_id_fk',
  'item_fk',
  'fk_id_task'
]);
CREATE OR REPLACE FUNCTION public.set_person_item_count_fk_refer_to_production_tables_func()
  RETURNS VOID
  LANGUAGE plpgsql
  VOLATILE
  CALLED ON NULL INPUT
  SECURITY INVOKER
  COST 1
  AS $$
BEGIN
  TRUNCATE person_item_count;
  ALTER TABLE person_item_count
  DROP CONSTRAINT IF EXISTS person_item_count_person_fk,
  ADD CONSTRAINT person_item_count_person_fk FOREIGN KEY (id_person) REFERENCES person(id) MATCH FULL ON UPDATE CASCADE ON DELETE CASCADE;
END
$$;
DROP FUNCTION IF EXISTS public.drop_constraint_for_all_condition_album_item_tables();