55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
package App::Netdisco::DB::Result::Virtual::UnDirEdgesAgg;
 | 
						|
 | 
						|
use strict;
 | 
						|
use warnings;
 | 
						|
 | 
						|
use base 'DBIx::Class::Core';
 | 
						|
 | 
						|
__PACKAGE__->table_class('DBIx::Class::ResultSource::View');
 | 
						|
 | 
						|
__PACKAGE__->table('undir_edges_agg');
 | 
						|
__PACKAGE__->result_source_instance->is_virtual(1);
 | 
						|
__PACKAGE__->result_source_instance->view_definition(<<'ENDSQL');
 | 
						|
   SELECT left_ip,
 | 
						|
          array_agg(right_ip) AS links
 | 
						|
   FROM
 | 
						|
     ( SELECT dp.ip AS left_ip,
 | 
						|
              di.ip AS right_ip
 | 
						|
      FROM
 | 
						|
        (SELECT device_port.ip,
 | 
						|
                device_port.remote_ip
 | 
						|
         FROM device_port
 | 
						|
         WHERE device_port.remote_port IS NOT NULL
 | 
						|
         GROUP BY device_port.ip,
 | 
						|
                  device_port.remote_ip) dp
 | 
						|
      LEFT JOIN device_ip di ON dp.remote_ip = di.alias
 | 
						|
      WHERE di.ip IS NOT NULL
 | 
						|
      UNION SELECT di.ip AS left_ip,
 | 
						|
                   dp.ip AS right_ip
 | 
						|
      FROM
 | 
						|
        (SELECT device_port.ip,
 | 
						|
                device_port.remote_ip
 | 
						|
         FROM device_port
 | 
						|
         WHERE device_port.remote_port IS NOT NULL
 | 
						|
         GROUP BY device_port.ip,
 | 
						|
                  device_port.remote_ip) dp
 | 
						|
      LEFT JOIN device_ip di ON dp.remote_ip = di.alias
 | 
						|
      WHERE di.ip IS NOT NULL ) AS foo
 | 
						|
   GROUP BY left_ip
 | 
						|
   ORDER BY left_ip
 | 
						|
ENDSQL
 | 
						|
 | 
						|
__PACKAGE__->add_columns(
 | 
						|
  'left_ip' => {
 | 
						|
    data_type => 'inet',
 | 
						|
  },
 | 
						|
  'links' => {
 | 
						|
    data_type => 'inet[]',
 | 
						|
  }
 | 
						|
);
 | 
						|
 | 
						|
__PACKAGE__->belongs_to('device', 'App::Netdisco::DB::Result::Device',
 | 
						|
  { 'foreign.ip' => 'self.left_ip' });
 | 
						|
 | 
						|
1;
 |