use DBIx::Class::ResultSetColumn;
use base qw/DBIx::Class/;
-use Data::Dumper; $Data::Dumper::Indent = 1;
-
__PACKAGE__->load_components(qw/AccessorGroup/);
__PACKAGE__->mk_group_accessors('simple' => qw/result_source result_class/);
result_source => $source,
result_class => $attrs->{result_class} || $source->result_class,
cond => $attrs->{where},
-# from => $attrs->{from},
-# collapse => $collapse,
count => undef,
pager => undef,
attrs => $attrs
"' has no such relationship $rel")
unless $rel_obj;
- my $rs = $self->search(undef, { join => $rel });
- my ($from,$seen) = $rs->_resolve_from;
+ my ($from,$seen) = $self->_resolve_from($rel);
- my $join_count = $self->{attrs}{seen_join}{$rel};
- my $alias = $join_count ? join('_', $rel, $join_count+1) : $rel;
+ my $join_count = $seen->{$rel};
+ my $alias = ($join_count > 1 ? join('_', $rel, $join_count) : $rel);
$self->result_source->schema->resultset($rel_obj->{class})->search_rs(
undef, {
+ %{$self->{attrs}||{}},
+ join => undef,
+ prefetch => undef,
select => undef,
as => undef,
alias => $alias,
where => $self->{cond},
- _parent_from => $from,
seen_join => $seen,
+ _parent_from => $from,
});
};
}
sub _resolve_from {
- my ($self) = @_;
+ my ($self, $extra_join) = @_;
my $source = $self->result_source;
my $attrs = $self->{attrs};
my $from = $attrs->{_parent_from}
|| [ { $attrs->{alias} => $source->from } ];
-# ? [ @{$attrs->{_parent_from}} ]
-# : undef;
my $seen = { %{$attrs->{seen_join}||{}} };
- if ($attrs->{join}) {
- push(@{$from},
- $source->resolve_join($attrs->{join}, $attrs->{alias}, $seen)
- );
- }
+ my $join = ($attrs->{join}
+ ? [ $attrs->{join}, $extra_join ]
+ : $extra_join);
+ push(@{$from},
+ $source->resolve_join($join, $attrs->{alias}, $seen)
+ );
return ($from,$seen);
}
my $source = $self->{result_source};
my $alias = $attrs->{alias};
- # XXX - lose storable dclone
- my $record_filter = delete $attrs->{record_filter};
- #$attrs = Storable::dclone($attrs || {}); # { %{ $attrs || {} } };
-
- $attrs->{record_filter} = $record_filter if $record_filter;
-
$attrs->{columns} ||= delete $attrs->{cols} if exists $attrs->{cols};
if ($attrs->{columns}) {
delete $attrs->{as};
} elsif (!$attrs->{select}) {
- $attrs->{columns} = [ $self->{result_source}->columns ];
+ $attrs->{columns} = [ $source->columns ];
}
$attrs->{select} ||= [
|| [ { 'me' => $source->from } ];
if (exists $attrs->{join} || exists $attrs->{prefetch}) {
-
my $join = delete $attrs->{join} || {};
if (defined $attrs->{prefetch}) {