Function Properties
Language: PLPGSQL
Return Type: SET OF integer
ReachableFromNode(receiver, blacklist) Find all nodes that <receiver> can receive events from without using nodes in <blacklist> as a relay.declare v_node alias for $1 ; v_blacklist alias for $2 ; v_ignore int4[] ; v_reachable_edge_last int4[] ; v_reachable_edge_new int4[] default '{}' ; v_server record ; begin v_reachable_edge_last := array[v_node] ; v_ignore := v_blacklist || array[v_node] ; return next v_node ; while v_reachable_edge_last != '{}' loop v_reachable_edge_new := '{}' ; for v_server in select pa_server as no_id from sl_path where pa_client = ANY(v_reachable_edge_last) and pa_server != ALL(v_ignore) loop if v_server.no_id != ALL(v_ignore) then v_ignore := v_ignore || array[v_server.no_id] ; v_reachable_edge_new := v_reachable_edge_new || array[v_server.no_id] ; return next v_server.no_id ; end if ; end loop ; v_reachable_edge_last := v_reachable_edge_new ; end loop ; return ; end ;