X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FPK.pm;h=e281dd48ab3c51bfd8f010e9747e3b5b69bf6baf;hb=243a6b72cfb2a6f2ccfcd84b665f1880790e2ff9;hp=2a68df55a2b1dfce7375d2ca5edff937399c0ea0;hpb=aefa6508d3b034fb36d1a919c5be0aa363c52328;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/PK.pm b/lib/DBIx/Class/PK.pm index 2a68df5..e281dd4 100644 --- a/lib/DBIx/Class/PK.pm +++ b/lib/DBIx/Class/PK.pm @@ -39,14 +39,20 @@ 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->schema->storage->reload_row($self); + 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; }