change sub attr to be simple rel to improve efficiency of joins

This commit is contained in:
Oliver Gorwits
2012-01-12 21:19:15 +00:00
parent c6cea82685
commit 9dea705a1b
2 changed files with 29 additions and 28 deletions

View File

@@ -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 {

View File

@@ -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' );