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$;