Aniki
view release on metacpan or search on metacpan
lib/Aniki/Result/Collection/Joined.pm view on Meta::CPAN
package Aniki::Result::Collection::Joined;
use 5.014002;
use namespace::autoclean;
use Mouse v2.4.5;
extends qw/Aniki::Result::Collection/;
use Carp qw/croak/;
use Aniki::Row::Joined;
use List::MoreUtils qw/none/;
use List::UtilsBy qw/uniq_by/;
use Scalar::Util qw/refaddr/;
has '+table_name' => (
required => 0,
lazy => 1,
default => sub { join ',', @{ $_[0]->table_names } }
);
has '+row_class' => (
lazy => 1,
default => sub { croak 'Cannot get row class of '.__PACKAGE__.'. Use row_classes instead of row_class.' },
);
has table_names => (
is => 'ro',
required => 1,
);
has _compact_row_datas => (
is => 'ro',
lazy => 1,
builder => '_compress',
);
has _subresult_cache => (
is => 'ro',
default => sub {
my $self = shift;
return +{
map { $_ => undef } @{ $self->table_names },
};
},
);
sub row_classes {
my $self = shift;
return map { $self->handler->guess_row_class($_) } @{ $self->table_names };
}
sub rows {
my $self = shift;
if (@_ == 1) {
my $table_name = shift;
return $self->subresult($table_name)->rows();
}
return $self->SUPER::rows();
}
sub subresult {
my ($self, $table_name) = @_;
return $self->_subresult_cache->{$table_name} if $self->_subresult_cache->{$table_name};
my $result_class = $self->handler->guess_result_class($table_name);
( run in 0.875 second using v1.01-cache-2.11-cpan-5a3173703d6 )