--- nfo/perl/libs/Data/Storage.pm 2002/10/17 00:04:29 1.2 +++ nfo/perl/libs/Data/Storage.pm 2002/10/25 11:40:37 1.3 @@ -1,8 +1,13 @@ ################################# # -# $Id: Storage.pm,v 1.2 2002/10/17 00:04:29 joko Exp $ +# $Id: Storage.pm,v 1.3 2002/10/25 11:40:37 joko Exp $ # # $Log: Storage.pm,v $ +# Revision 1.3 2002/10/25 11:40:37 joko +# + enhanced robustness +# + more logging for debug-levels +# + sub dropDb +# # Revision 1.2 2002/10/17 00:04:29 joko # + sub createDb # + sub isConnected @@ -14,6 +19,10 @@ # ################################# +# aim_V1: should encapsulate Tangram, DBI, DBD::CSV and LWP:: to access them in an unordinary way ;) +# aim_V2: introduce a generic layered structure, refactor *SUBLAYER*-stuff, make (e.g.) this possible: +# - Perl Data::Storage[DBD::CSV] -> Perl LWP:: -> Internet HTTP/FTP/* -> Host Daemon -> csv-file + package Data::Storage; use strict; @@ -57,7 +66,10 @@ $method =~ s/^.*:://; # advanced logging of AUTOLOAD calls - my $logstring = __PACKAGE__ . "[$self->{locator}->{type}]" . "->" . $method . "(@_)"; + my $logstring = ""; + $logstring .= __PACKAGE__ . "[$self->{locator}->{type}]" . "->" . $method; + #print "count: ", $#_, "\n"; + #$logstring .= Dumper(@_) if ($#_ != -1); my $tabcount = int( (80 - length($logstring)) / 10 ); $logstring .= "\t" x $tabcount . "(AUTOLOAD)"; # TODO: only ok if logstring doesn't contain @@ -97,7 +109,7 @@ sub _accessStorage { my $self = shift; # TODO: to some tracelevel! - #$logger->debug( __PACKAGE__ . "[$self->{type}]" . "->_accessStorage()" ); + $logger->debug( __PACKAGE__ . "[$self->{locator}->{type}]" . "->_accessStorage()" ); if (!$self->{STORAGEHANDLE}) { $self->_createStorageHandle(); } @@ -117,6 +129,7 @@ use Data::Storage::Handler::DBI; #my @args = %{$self->{locator}->{dbi}}; my @args = %{$self->{locator}}; + # create new storage handle $self->{STORAGEHANDLE} = $pkg->new( @args ); } if ($type eq 'Tangram') { @@ -124,7 +137,9 @@ #$self->{STORAGEHANDLE} = $pkg->new( dsn => $self->{locator}->{dbi}->{dsn} ); #my @args = %{$self->{locator}->{dbi}}; my @args = %{$self->{locator}}; + # create new storage handle $self->{STORAGEHANDLE} = $pkg->new( @args ); + #$self->{STORAGEHANDLE_UNDERLYING} = $self->{STORAGEHANDLE}->getUnderlyingStorage(); #$self->{STORAGEHANDLE_UNDERLYING}->_configureCOREHANDLE(); } @@ -136,7 +151,7 @@ my $self = shift; my $name = shift; my $package = shift; - my $logger = shift; + my $logger1 = shift; my $objectCreator = shift; #$logger->add( Log::Dispatch::Tangram->new( name => $name, @@ -163,7 +178,7 @@ my $self = shift; my $name = shift; - my $logger = shift; + #my $logger = shift; $logger->remove($name); @@ -194,6 +209,9 @@ sub createDb { my $self = shift; my $dsn = $self->{locator}->{dbi}->{dsn}; + + $logger->debug( __PACKAGE__ . "->createDb( dsn $dsn )" ); + $dsn =~ s/database=(.+?);//; my $database_name = $1; @@ -214,6 +232,31 @@ } +sub dropDb { + my $self = shift; + my $dsn = $self->{locator}->{dbi}->{dsn}; + + $logger->debug( __PACKAGE__ . "->dropDb( dsn $dsn )" ); + + $dsn =~ s/database=(.+?);//; + my $database_name = $1; + + my $ok; + + if ( my $dbh = DBI->connect($dsn, '', '', { + PrintError => 0, + } ) ) { + if ($database_name) { + if ($dbh->do("DROP DATABASE $database_name;")) { + $ok = 1; + } + } + $dbh->disconnect(); + } + + return $ok; +} + sub isConnected { my $self = shift; return 1 if $self->{STORAGEHANDLE};