change sub attr to be simple rel to improve efficiency of joins
This commit is contained in:
		| @@ -76,24 +76,27 @@ __PACKAGE__->belongs_to( device => 'Netdisco::DB::Result::Device', 'ip', | ||||
|   }, | ||||
| ); | ||||
| __PACKAGE__->has_many( port_vlans_tagged => 'Netdisco::DB::Result::DevicePortVlan', | ||||
|     sub { | ||||
|         my $args = shift; | ||||
|         return { | ||||
|             "$args->{foreign_alias}.ip" => { -ident => "$args->{self_alias}.ip" }, | ||||
|             "$args->{foreign_alias}.port" => { -ident => "$args->{self_alias}.port" }, | ||||
|             -not_bool => "$args->{foreign_alias}.native", | ||||
|         }; | ||||
|     { | ||||
|         'foreign.ip' => 'self.ip', | ||||
|         'foreign.port' => 'self.port', | ||||
|     }, | ||||
|     { | ||||
|         where => { -not_bool => 'me.native' }, | ||||
|     } | ||||
| ); | ||||
| __PACKAGE__->many_to_many( tagged_vlans => 'port_vlans_tagged', 'vlan' ); | ||||
| # weirdly I could not get row.tagged.vlans.count to work in TT | ||||
| # so gave up and wrote this instead. | ||||
| sub tagged_vlans_count { | ||||
|   return (shift)->tagged_vlans->count; | ||||
| } | ||||
| __PACKAGE__->might_have( native_port_vlan => 'Netdisco::DB::Result::DevicePortVlan', | ||||
|     sub { | ||||
|         my $args = shift; | ||||
|         return { | ||||
|             "$args->{foreign_alias}.ip" => { -ident => "$args->{self_alias}.ip" }, | ||||
|             "$args->{foreign_alias}.port" => { -ident => "$args->{self_alias}.port" }, | ||||
|             -bool => "$args->{foreign_alias}.native", | ||||
|         }; | ||||
|     { | ||||
|         'foreign.ip' => 'self.ip', | ||||
|         'foreign.port' => 'self.port', | ||||
|     }, | ||||
|     { | ||||
|         where => { -bool => 'me.native' }, | ||||
|     } | ||||
| ); | ||||
| sub native_vlan { | ||||
|   | ||||
| @@ -39,23 +39,21 @@ __PACKAGE__->set_primary_key("ip", "vlan"); | ||||
|  | ||||
| __PACKAGE__->belongs_to( device => 'Netdisco::DB::Result::Device', 'ip' ); | ||||
| __PACKAGE__->has_many( port_vlans_tagged => 'Netdisco::DB::Result::DevicePortVlan', | ||||
|     sub { | ||||
|         my $args = shift; | ||||
|         return { | ||||
|             "$args->{foreign_alias}.ip" => { -ident => "$args->{self_alias}.ip" }, | ||||
|             "$args->{foreign_alias}.vlan" => { -ident => "$args->{self_alias}.vlan" }, | ||||
|             -not_bool => "$args->{foreign_alias}.native", | ||||
|         }; | ||||
|     { | ||||
|         'foreign.ip' => 'self.ip', | ||||
|         'foreign.vlan' => 'self.vlan', | ||||
|     }, | ||||
|     { | ||||
|         where => { -not_bool => 'me.native' }, | ||||
|     } | ||||
| ); | ||||
| __PACKAGE__->has_many( port_vlans_native => 'Netdisco::DB::Result::DevicePortVlan', | ||||
|     sub { | ||||
|         my $args = shift; | ||||
|         return { | ||||
|             "$args->{foreign_alias}.ip" => { -ident => "$args->{self_alias}.ip" }, | ||||
|             "$args->{foreign_alias}.vlan" => { -ident => "$args->{self_alias}.vlan" }, | ||||
|             -bool => "$args->{foreign_alias}.native", | ||||
|         }; | ||||
|     { | ||||
|         'foreign.ip' => 'self.ip', | ||||
|         'foreign.vlan' => 'self.vlan', | ||||
|     }, | ||||
|     { | ||||
|         where => { -bool => 'me.native' }, | ||||
|     } | ||||
| ); | ||||
| __PACKAGE__->many_to_many( tagging_ports => 'port_vlans_tagged', 'port' ); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user