X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FPK.pm;h=b2efdf8b2c02050fe9605cacd001578acf485e57;hb=ddf66ced51e4cb9b888001bc926bc0b3c3af0f8b;hp=2a68df55a2b1dfce7375d2ca5edff937399c0ea0;hpb=aefa6508d3b034fb36d1a919c5be0aa363c52328;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/PK.pm b/lib/DBIx/Class/PK.pm index 2a68df5..b2efdf8 100644 --- a/lib/DBIx/Class/PK.pm +++ b/lib/DBIx/Class/PK.pm @@ -39,14 +39,21 @@ sub discard_changes { my ($self) = @_; delete $self->{_dirty_columns}; return unless $self->in_storage; # Don't reload if we aren't real! - my ($reload) = $self->result_source->resultset->find - (map { $self->$_ } $self->primary_columns); + + my $reload = $self->result_source->resultset->find( + map { $self->$_ } $self->primary_columns + ); unless ($reload) { # If we got deleted in the mean-time $self->in_storage(0); return $self; } - delete @{$self}{keys %$self}; - @{$self}{keys %$reload} = values %$reload; + + %$self = %$reload; + + # Avoid a possible infinite loop with + # sub DESTROY { $_[0]->discard_changes } + bless $reload, 'Do::Not::Exist'; + return $self; }