X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSet.pm;h=a33e22f5b80beed3d811447bfee0ed429a5fc28a;hb=8452e496;hp=824c51ee6a132ab57d6330efd9302cac599a7bf1;hpb=c2b15eccdc6d7a3a07bcb413e3c15ea907cfa643;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSet.pm b/lib/DBIx/Class/ResultSet.pm index 824c51e..a33e22f 100644 --- a/lib/DBIx/Class/ResultSet.pm +++ b/lib/DBIx/Class/ResultSet.pm @@ -6,6 +6,7 @@ use overload '0+' => 'count', fallback => 1; use Data::Page; +use Storable; =head1 NAME @@ -37,7 +38,7 @@ sub new { $class->new_result(@_) if ref $class; my ($source, $attrs) = @_; #use Data::Dumper; warn Dumper(@_); - $attrs = { %{ $attrs || {} } }; + $attrs = Storable::dclone($attrs || {}); # { %{ $attrs || {} } }; my %seen; my $alias = ($attrs->{alias} ||= 'me'); if (!$attrs->{select}) { @@ -58,15 +59,15 @@ sub new { $seen{$j} = 1; } } - push(@{$attrs->{from}}, $source->result_class->_resolve_join($join, $attrs->{alias})); + push(@{$attrs->{from}}, $source->resolve_join($join, $attrs->{alias})); } $attrs->{group_by} ||= $attrs->{select} if delete $attrs->{distinct}; foreach my $pre (@{delete $attrs->{prefetch} || []}) { - push(@{$attrs->{from}}, $source->result_class->_resolve_join($pre, $attrs->{alias})) + push(@{$attrs->{from}}, $source->resolve_join($pre, $attrs->{alias})) unless $seen{$pre}; my @pre = map { "$pre.$_" } - $source->result_class->_relationships->{$pre}->{class}->columns; + $source->result_class->relationship_info($pre)->{class}->columns; push(@{$attrs->{select}}, @pre); push(@{$attrs->{as}}, @pre); } @@ -176,22 +177,17 @@ sub find { sub search_related { my ($self, $rel, @rest) = @_; - my $rel_obj = $self->{source}->result_class->_relationships->{$rel}; + my $rel_obj = $self->{source}->result_class->relationship_info($rel); $self->{source}->result_class->throw( "No such relationship ${rel} in search_related") unless $rel_obj; - my $r_class = $self->{source}->result_class->resolve_class($rel_obj->{class}); - my $source = $r_class->result_source; - $source = bless({ %{$source} }, ref $source || $source); - $source->storage($self->{source}->storage); - $source->result_class($r_class); my $rs = $self->search(undef, { join => $rel }); - #use Data::Dumper; warn Dumper($rs); - return $source->resultset_class->new( - $source, { %{$rs->{attrs}}, - alias => $rel, - select => undef(), - as => undef() } + return $self->{source}->schema->resultset($rel_obj->{class} + )->search( undef, + { %{$rs->{attrs}}, + alias => $rel, + select => undef(), + as => undef() } )->search(@rest); } @@ -290,8 +286,8 @@ sub count { my $attrs = { %{ $self->{attrs} }, select => { 'count' => '*' }, as => [ 'count' ] }; - # offset, order by and page are not needed to count - delete $attrs->{$_} for qw/rows offset order_by page pager/; + # 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/; ($self->{count}) = (ref $self)->new($self->{source}, $attrs)->cursor->next; }