Aniki
view release on metacpan or search on metacpan
lib/Aniki/Schema/Relationship/Fetcher.pm view on Meta::CPAN
use Mouse v2.4.5;
has relationship => (
is => 'ro',
weak_ref => 1,
required => 1,
);
use List::MoreUtils qw/pairwise notall/;
use List::UtilsBy qw/partition_by/;
use Scalar::Util qw/weaken/;
use SQL::QueryMaker;
sub execute {
my ($self, $handler, $rows, $prefetch) = @_;
return unless @$rows;
my %where;
if (ref $prefetch eq 'HASH') {
my %prefetch;
for my $key (keys %$prefetch) {
lib/Aniki/Schema/Relationship/Fetcher.pm view on Meta::CPAN
my $dest_keygen = sub {
my $dest_row = shift;
return join '|', map { defined $_ ? quotemeta $_ : '(NULL)' } map { $dest_row->get_column($_) } @dest_columns;
};
my %dest_rows_map = partition_by { $dest_keygen->($_) } @$dest_rows;
for my $src_row (@$src_rows) {
next if notall { defined $src_row->get_column($_) } @src_columns;
my $dest_rows = $dest_rows_map{$src_keygen->($src_row)};
$src_row->relay_data->{$name} = $has_many ? $dest_rows : $dest_rows->[0];
weaken($src_row->relay_data->{$name});
}
}
}
__PACKAGE__->meta->make_immutable();
__END__
( run in 0.262 second using v1.01-cache-2.11-cpan-65fba6d93b7 )