-- -- composition_rels_del_tr/0 -- create or replace function composition_rels_del_tr( ) returns trigger as $$ declare v_object_id_one acs_rels.object_id_one%TYPE; v_object_id_two acs_rels.object_id_two%TYPE; n_rows integer; v_error text; map record; begin -- First check if removing this relation would violate any relational constraints v_error := rel_constraint__violation_if_removed(old.rel_id); if v_error is not null then raise EXCEPTION '-20000: %', v_error; end if; select object_id_one, object_id_two into v_object_id_one, v_object_id_two from acs_rels where rel_id = old.rel_id; for map in select * from group_component_map where rel_id = old.rel_id LOOP delete from group_element_index where rel_id = old.rel_id; select count(*) into n_rows from group_component_map where group_id = map.group_id and component_id = map.component_id; if n_rows = 0 then perform party_approved_member__remove(map.group_id, member_id, rel_id, rel_type) from group_approved_member_map where group_id = map.group_id and container_id = map.component_id; delete from group_element_index where group_id = map.group_id and container_id = map.component_id and ancestor_rel_type = 'membership_rel'; end if; end loop; for map in select * from group_component_map where group_id in (select group_id from group_component_map where component_id = v_object_id_one union select v_object_id_one from dual) and component_id in (select component_id from group_component_map where group_id = v_object_id_two union select v_object_id_two from dual) and group_contains_p(group_id, component_id, rel_id) = 'f' LOOP delete from group_element_index where group_id = map.group_id and element_id = map.component_id and rel_id = map.rel_id; select count(*) into n_rows from group_component_map where group_id = map.group_id and component_id = map.component_id; if n_rows = 0 then end if; perform party_approved_member__remove(map.group_id, member_id, rel_id, rel_type) from group_approved_member_map where group_id = map.group_id and container_id = map.component_id; delete from group_element_index where group_id = map.group_id and container_id = map.component_id and ancestor_rel_type = 'membership_rel'; end loop; return old; end;$$ language plpgsql;