X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FRow.pm;h=197a393dbb1a6ce534648a47227908b770b4f1f1;hb=0488c7e1294791e01dc75dfe633454d0f4201384;hp=cad0185cd916256510252c06db30577e78f6b96e;hpb=2231d31c29347c34a6b58b88782da220775bddaa;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Row.pm b/lib/DBIx/Class/Row.pm index cad0185..197a393 100644 --- a/lib/DBIx/Class/Row.pm +++ b/lib/DBIx/Class/Row.pm @@ -1125,7 +1125,7 @@ sub copy { my $new = { _column_data => $col_data }; bless $new, ref $self; - $new->result_source($self->result_source); + $new->result_source(my $source = $self->result_source); $new->set_inflated_columns($changes); $new->insert; @@ -1134,15 +1134,19 @@ sub copy { # constraints my $relnames_copied = {}; - foreach my $relname ($self->result_source->relationships) { - my $rel_info = $self->result_source->relationship_info($relname); + foreach my $relname ($source->relationships) { + my $rel_info = $source->relationship_info($relname); next unless $rel_info->{attrs}{cascade_copy}; - my $resolved = $self->result_source->_resolve_condition( + my $resolved = $source->_resolve_condition( $rel_info->{cond}, $relname, $new, $relname ); + if (ref($resolved) eq 'REF') { + $resolved = $source->_extract_fixed_values_for($$resolved, 'me'); + } + my $copied = $relnames_copied->{ $rel_info->{source} } ||= {}; foreach my $related ($self->search_related($relname)->all) { my $id_str = join("\0", $related->id);