X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSerialize%2FStorable.pm;h=7cc121816a09aa85c5b6ba694465a4472688f571;hb=a5722c7269d6eec8621964686e52268b5a8a34aa;hp=45a82858122f6e37e93f64e2b8854c84e40944e0;hpb=2053ab2a47d0cbf3db670003d01a9b4650bc46d6;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Serialize/Storable.pm b/lib/DBIx/Class/Serialize/Storable.pm index 45a8285..7cc1218 100644 --- a/lib/DBIx/Class/Serialize/Storable.pm +++ b/lib/DBIx/Class/Serialize/Storable.pm @@ -4,24 +4,34 @@ use warnings; use Storable; sub STORABLE_freeze { - my ($self,$cloning) = @_; + my ($self, $cloning) = @_; my $to_serialize = { %$self }; + + # The source is either derived from _source_handle or is + # reattached in the thaw handler below delete $to_serialize->{result_source}; + + # Dynamic values, easy to recalculate + delete $to_serialize->{$_} for qw/related_resultsets _inflated_column/; + return (Storable::freeze($to_serialize)); } sub STORABLE_thaw { - my ($self,$cloning,$serialized) = @_; + my ($self, $cloning, $serialized) = @_; + %$self = %{ Storable::thaw($serialized) }; + + # if the handle went missing somehow, reattach $self->result_source($self->result_source_instance) - if $self->can('result_source_instance'); + if !$self->_source_handle && $self->can('result_source_instance'); } 1; __END__ -=head1 NAME +=head1 NAME DBIx::Class::Serialize::Storable - hooks for Storable freeze/thaw @@ -29,7 +39,7 @@ __END__ # in a table class definition __PACKAGE__->load_components(qw/Serialize::Storable/); - + # meanwhile, in a nearby piece of code my $cd = $schema->resultset('CD')->find(12); # if the cache uses Storable, this will work automatically @@ -41,6 +51,22 @@ This component adds hooks for Storable so that row objects can be serialized. It assumes that your row object class (C) is the same as your table class, which is the normal situation. +=head1 HOOKS + +The following hooks are defined for L - see the +documentation for L for detailed information on these +hooks. + +=head2 STORABLE_freeze + +The serializing hook, called on the object during serialization. It +can be inherited, or defined in the class itself, like any other +method. + +=head2 STORABLE_thaw + +The deserializing hook called on the object during deserialization. + =head1 AUTHORS David Kamholz