X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FRow.pm;h=630d2bc8458084b52101edbb6aa41a643c6e6063;hb=cc506f8b4fdf305b5f4483c7fdad19bc84ea68c8;hp=d356218f545b9358674f9de4d37622ffa1983a36;hpb=4006691d207a6c257012c4b9a07d674b211349b0;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Row.pm b/lib/DBIx/Class/Row.pm index d356218..630d2bc 100644 --- a/lib/DBIx/Class/Row.pm +++ b/lib/DBIx/Class/Row.pm @@ -890,7 +890,10 @@ sub get_inflated_columns { } sub _is_column_numeric { - my ($self, $column) = @_; + my ($self, $column) = @_; + + return undef unless $self->result_source->has_column($column); + my $colinfo = $self->result_source->column_info ($column); # cache for speed (the object may *not* have a resultsource instance) @@ -942,9 +945,10 @@ sub set_column { my $dirty = $self->{_dirty_columns}{$column} || - $self->in_storage # no point tracking dirtyness on uninserted data + ( $self->in_storage # no point tracking dirtyness on uninserted data ? ! $self->_eq_column_values ($column, $old_value, $new_value) : 1 + ) ; if ($dirty) { @@ -1143,14 +1147,14 @@ is set by default on C relationships and unset on all others. sub copy { my ($self, $changes) = @_; $changes ||= {}; - my $col_data = { %{$self->{_column_data}} }; + my $col_data = { $self->get_columns }; my $rsrc = $self->result_source; - my $colinfo = $rsrc->columns_info([ keys %$col_data ]); + my $colinfo = $rsrc->columns_info; foreach my $col (keys %$col_data) { delete $col_data->{$col} - if $colinfo->{$col}{is_auto_increment}; + if ( ! $colinfo->{$col} or $colinfo->{$col}{is_auto_increment} ); } my $new = { _column_data => $col_data }; @@ -1176,10 +1180,8 @@ sub copy { my $copied = $rel_names_copied->{ $rel_info->{source} } ||= {}; foreach my $related ($self->search_related($rel_name)->all) { - my $id_str = join("\0", $related->id); - next if $copied->{$id_str}; - $copied->{$id_str} = 1; - my $rel_copy = $related->copy($resolved); + $related->copy($resolved) + unless $copied->{$related->ID}++; } }