--- nfo/perl/libs/Data/Storage/Handler/Tangram.pm 2002/12/05 07:59:04 1.13 +++ nfo/perl/libs/Data/Storage/Handler/Tangram.pm 2002/12/05 13:55:21 1.15 @@ -1,8 +1,15 @@ ############################################ # -# $Id: Tangram.pm,v 1.13 2002/12/05 07:59:04 joko Exp $ +# $Id: Tangram.pm,v 1.15 2002/12/05 13:55:21 joko Exp $ # # $Log: Tangram.pm,v $ +# Revision 1.15 2002/12/05 13:55:21 joko +# + now utilizing 'object2hash' instead of 'var_deref' +# + played around with having fresh-objects - no progress.... +# +# Revision 1.14 2002/12/05 09:40:30 jonen +# + added option->{destroy} at getObject for unloading all instance +# # Revision 1.13 2002/12/05 07:59:04 joko # + now using Tie::SecureHash as a base for the COREHANDLE # + former public COREHANDLE becomes private _COREHANDLE now @@ -75,7 +82,7 @@ use libp qw( getNewPerlObjectByPkgName ); use Data::Storage::Result::Tangram; use Data::Compare::Struct qw( isEmpty ); -use Data::Transform::Deep qw( var_deref ); +use Data::Transform::Deep qw( object2hash ); use Data::Transform::Encode qw( var2utf8 ); @@ -489,6 +496,10 @@ sub getObject { my $self = shift; my $oid = shift; + my $options = shift; + # TODO: create a deep_unload method + # unload($oid) will only unload object, not deep object hashes + $self->{_COREHANDLE}->unload() if($options->{destroy}); # TODO: review this #if (!$self->{COREHANDLE}) { return; } return $self->{_COREHANDLE}->load($oid); @@ -498,11 +509,38 @@ my $self = shift; my $oid = shift; my $options = shift; - my $obj = $self->getObject($oid); - my $deref = var_deref($obj); - var2utf8($deref) if ($options->{utf8}); - undef($obj) if($options->{destroy}); - return $deref; + my $obj = $self->getObject($oid, $options); + + # build options (a callback to unload autovivified objects) for 'expand' + # TODO: use $logger to write to debug here! + my $cb; # = sub {}; +=pod + if ($options->{destroy}) { + $options->{cb}->{destroy} = sub { + print "================ DESTROY", "\n"; + my $object = shift; + #print Dumper($object); + $self->{_COREHANDLE}->unload($object); + #undef($object); + }; + } +=cut + + my $hash = object2hash($obj, $options); + #$options->{cb}->{destroy}->($obj); + #$self->{_COREHANDLE}->unload($obj); + + # convert values in hash to utf8 to be ready for (e.g.) encapsulation in XML + # now done in object2hash + #var2utf8($hash) if ($options->{utf8}); + + # old (wrong) attempts to get rid of used instances, if requested + #$obj->clear_refs; + #$self->{COREHANDLE}->unload($obj) if($options->{destroy}); + #$obj->DESTROY; + #undef($obj) if($options->{destroy}); + + return $hash; } sub getSchema {