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 1.135 second using v1.01-cache-2.11-cpan-5a3173703d6 )