declare
p_no_id alias for $1;
v_tab_row record;
begin
-- ----
-- Grab the central configuration lock
-- ----
lock table sl_config_lock;
-- ----
-- If the dropped node is a remote node, clean the configuration
-- from all traces for it.
-- ----
if p_no_id <> getLocalNodeId('_schemadoc') then
delete from sl_subscribe
where sub_receiver = p_no_id;
delete from sl_listen
where li_origin = p_no_id
or li_provider = p_no_id
or li_receiver = p_no_id;
delete from sl_path
where pa_server = p_no_id
or pa_client = p_no_id;
delete from sl_confirm
where con_origin = p_no_id
or con_received = p_no_id;
delete from sl_event
where ev_origin = p_no_id;
delete from sl_node
where no_id = p_no_id;
return p_no_id;
end if;
-- ----
-- This is us ... deactivate the node for now, the daemon
-- will call uninstallNode() in a separate transaction.
-- ----
update sl_node
set no_active = false
where no_id = p_no_id;
-- Rewrite sl_listen table
perform RebuildListenEntries();
return p_no_id;
end; |