Christopher B. Browne's Home Page
cbbrowne@gmail.com

1.81. reachablefromnode( integer, integer[] )

Function Properties

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

Google

If this was useful, let others know by an Affero rating

Contact me at cbbrowne@gmail.com