← Code-Übersicht

0007_artefakt_db_funktion.sql

Pfad: migrations/0007_artefakt_db_funktion.sql

Ext: sql

Größe: 1469 Bytes

Geändert: 2026-07-16 01:14:23+02

-- Migration 0007: Artefakt-Typ db_funktion (PL/pgSQL-Funktionen katalogisierbar).
-- Statements durch -- @@ getrennt.
ALTER TABLE artefakt DROP CONSTRAINT artefakt_typ_check;
-- @@
ALTER TABLE artefakt ADD CONSTRAINT artefakt_typ_check
    CHECK (typ IN ('datei','datenbank','tabelle','spalte','code_symbol','schnittstelle','db_funktion'));
-- @@
CREATE OR REPLACE FUNCTION public.fn_artefakt_hierarchie() RETURNS trigger
LANGUAGE plpgsql AS $fn$
DECLARE ptyp text;
BEGIN
    IF NEW.parent_id IS NOT NULL THEN
        SELECT typ INTO ptyp FROM artefakt WHERE id = NEW.parent_id;
    END IF;
    IF NEW.typ = 'spalte' AND ptyp IS DISTINCT FROM 'tabelle' THEN
        RAISE EXCEPTION 'Artefakt-Hierarchie: spalte benoetigt Eltern-Typ tabelle';
    ELSIF NEW.typ = 'tabelle' AND ptyp IS DISTINCT FROM 'datenbank' THEN
        RAISE EXCEPTION 'Artefakt-Hierarchie: tabelle benoetigt Eltern-Typ datenbank';
    ELSIF NEW.typ = 'code_symbol' AND (ptyp IS NULL OR ptyp NOT IN ('datei','code_symbol')) THEN
        RAISE EXCEPTION 'Artefakt-Hierarchie: code_symbol benoetigt Eltern datei oder code_symbol';
    ELSIF NEW.typ = 'datei' AND ptyp IS NOT NULL AND ptyp <> 'datei' THEN
        RAISE EXCEPTION 'Artefakt-Hierarchie: datei-Eltern muss datei sein';
    ELSIF NEW.typ IN ('datenbank','schnittstelle','db_funktion') AND ptyp IS NOT NULL THEN
        RAISE EXCEPTION 'Artefakt-Hierarchie: % erlaubt keinen Eltern-Knoten', NEW.typ;
    END IF;
    RETURN NEW;
END;
$fn$;