use Carp::Clan qw/^DBIx::Class/;
use Data::Page;
use Storable;
-use Scalar::Util qw/weaken/;
use DBIx::Class::ResultSetColumn;
use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/AccessorGroup/);
return $class->new_result(@_) if ref $class;
my ($source, $attrs) = @_;
- weaken $source;
+ #weaken $source;
if ($attrs->{page}) {
$attrs->{rows} ||= 10;
}
my $rs = (ref $self)->new($self->result_source, $new_attrs);
- $rs->{_parent_rs} = $self->{_parent_rs} if $self->{_parent_rs};
+ $rs->{_parent_source} = $self->{_parent_source} if $self->{_parent_source};
unless (@_) { # no search, effectively just a clone
my $rows = $self->get_cache;
return $self->{_attrs} if $self->{_attrs};
my $attrs = $self->{attrs};
- my $source = $self->{_parent_rs} || $self->{result_source};
+ my $source = $self->{_parent_source} || $self->{result_source};
my $alias = $attrs->{_orig_alias};
# XXX - lose storable dclone
# offset, order by and page are not needed to count. record_filter is cdbi
delete $attrs->{$_} for qw/rows offset order_by page pager record_filter/;
my $tmp_rs = (ref $self)->new($self->result_source, $attrs);
- $tmp_rs->{_parent_rs} = $self->{_parent_rs} if $self->{_parent_rs};
+ $tmp_rs->{_parent_source} = $self->{_parent_source} if $self->{_parent_source};
#XXX - hack to pass through parent of related resultsets
my ($count) = $tmp_rs->cursor->next;
"search_related: result source '" . $self->result_source->name .
"' has no such relationship $rel")
unless $rel_obj;
-
- my $alias = $self->_resolved_attrs->{seen_join}{$rel}
- ? join('_', $rel, $self->_resolved_attrs->{seen_join}{$rel}+1)
- : $rel;
- my @live_join_stack = (@{$self->{attrs}{_live_join_stack}||[]}, $rel);
+ my @live_join_stack = @{$self->{attrs}{_live_join_stack}||[]};
+
+ # XXX mst: I'm sure this is wrong, somehow
+ # something with complex joins early on could die on search_rel
+ # followed by a prefetch. I think. need a test case.
+
+ my $join_count = scalar(grep { $_ eq $rel } @live_join_stack);
+ my $alias = $join_count ? join('_', $rel, $join_count+1) : $rel;
+
+ push(@live_join_stack, $rel);
my $rs = $self->result_source->schema->resultset($rel_obj->{class})->search(
undef, {
);
# keep reference of the original resultset
- $rs->{_parent_rs} = $self->{_parent_rs} || $self->result_source;
+ $rs->{_parent_source} = $self->{_parent_source} || $self->result_source;
return $rs;
};