--- nfo/perl/libs/Data/Storage/Handler/Abstract.pm 2002/11/29 04:58:20 1.3 +++ nfo/perl/libs/Data/Storage/Handler/Abstract.pm 2002/12/03 15:52:24 1.6 @@ -1,8 +1,18 @@ ################################# # -# $Id: Abstract.pm,v 1.3 2002/11/29 04:58:20 joko Exp $ +# $Id: Abstract.pm,v 1.6 2002/12/03 15:52:24 joko Exp $ # # $Log: Abstract.pm,v $ +# Revision 1.6 2002/12/03 15:52:24 joko +# + fix/feature: if dispatching to deep core method fails (is not declared), try method at Data::Storage - level +# +# Revision 1.5 2002/12/01 22:19:33 joko +# + just disconnect if COREHANDLE exists +# +# Revision 1.4 2002/12/01 04:45:38 joko +# + sub eraseAll +# + sub createDb +# # Revision 1.3 2002/11/29 04:58:20 joko # + Storage::Result now uses the same dispatching mechanism like Storage::Handler # @@ -116,6 +126,9 @@ # method calls doing it until here will get dispatched to the proper handler return $self->{COREHANDLE}->$methodname(@_); + + } elsif ($self->can($methodname)) { + return $self->$methodname(@_); } } @@ -129,7 +142,7 @@ # call "disconnect" or alike on COREHANDLE # was: $self->{COREHANDLE}->disconnect(); - $disconnectMethod && ( $self->{COREHANDLE}->$disconnectMethod() ); + $disconnectMethod && $self->{COREHANDLE} && ( $self->{COREHANDLE}->$disconnectMethod() ); undef $self->{COREHANDLE}; } @@ -182,6 +195,7 @@ # TODO: # - abstract "abstract methods" to list/hash to be used in AUTOLOAD # e.g.: my @ABSTRACT_METHODS = (qw( connect sendCommand getChildNodes )); + # use Class::XYZ (Construct) # - build them via anonymous subs # - introduce them via symbols @@ -242,4 +256,16 @@ return; } + sub eraseAll { + my $self = shift; + $self->_abstract_function('eraseAll'); + return; + } + + sub createDb { + my $self = shift; + $self->_abstract_function('createDb'); + return; + } + 1;