cr_trigger_func_rechte.sql 1 KB
-- Trigger Funktionen zu Rechten --
-- [
create function create_valid_rechte_mask()
    returns TRIGGER as '
        DECLARE
            err_msg text;
            new_len int4;
            old_len int4;
            dummy RECORD;
            sel text;
        BEGIN
            IF TG_OP <> ''UPDATE'' AND TG_OP <> ''INSERT'' THEN
                err_msg := TG_NAME || '': called for wrong action '' || TG_OP;
                RAISE EXCEPTION ''%'', err_msg;
            END IF;

            new_len := bit_length(NEW.maske);
            old_len := fibu.konto_typ_min_len();

            IF new_len < old_len THEN
                NEW.maske := bit_set_len(NEW.maske, old_len);
            END IF; 

            IF old_len < new_len THEN
                EXECUTE ''update fibu.konten_typen set konto_typ=konto_typ'' ||
                        ''::BIT('' || new_len || '')>>'' || new_len-old_len;
            END IF;

            RETURN NEW;
        END;
    ' language 'plpgsql';

-- create function on_ref_count_null_del_konto()