utf8columns fix
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / ResultSet.pm
index f4e7f96..4132d5f 100644 (file)
@@ -9,7 +9,6 @@ use overload
 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/);
@@ -85,7 +84,7 @@ sub new {
   return $class->new_result(@_) if ref $class;
 
   my ($source, $attrs) = @_;
-  weaken $source;
+  #weaken $source;
 
   if ($attrs->{page}) {
     $attrs->{rows} ||= 10;
@@ -235,7 +234,7 @@ sub search_rs {
   }
 
   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;
@@ -694,7 +693,7 @@ sub _resolved_attrs {
   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
@@ -1019,7 +1018,7 @@ sub _count { # Separated out so pager can get the full count
   # 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;
@@ -1604,12 +1603,17 @@ sub related_resultset {
       "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, {
@@ -1621,7 +1625,7 @@ sub related_resultset {
     );
 
     # 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;
   };