--- nfo/perl/libs/libdb.pm 2002/07/20 11:09:58 1.2 +++ nfo/perl/libs/libdb.pm 2002/12/12 02:48:58 1.8 @@ -1,7 +1,25 @@ ## -------------------------------------------------------------------------------- -## $Id: libdb.pm,v 1.2 2002/07/20 11:09:58 cvsjoko Exp $ +## $Id: libdb.pm,v 1.8 2002/12/12 02:48:58 joko Exp $ ## -------------------------------------------------------------------------------- ## $Log: libdb.pm,v $ +## Revision 1.8 2002/12/12 02:48:58 joko +## + played with fixing disconnectTarget +## +## Revision 1.7 2002/12/01 22:13:17 joko +## + minor bugfix? +## +## Revision 1.6 2002/11/29 04:53:39 joko +## + hash2Sql now knows about SQL_SELECT +## +## Revision 1.5 2002/11/17 07:18:38 joko +## + small modification in hash2sql +## +## Revision 1.4 2002/10/16 22:36:42 joko +## + sub testDbServer +## +## Revision 1.3 2002/07/27 00:28:20 cvsjoko +## bugfixes +## ## Revision 1.2 2002/07/20 11:09:58 cvsjoko ## + bugfixes ## + dont' print sql-errors @@ -17,23 +35,26 @@ use strict; use warnings; -use libp; -use DBI; - require Exporter; our @ISA = qw( Exporter ); -our @EXPORT = qw( +our @EXPORT_OK = qw( testDsn hash2Sql SQL_INSERT SQL_UPDATE connectTarget disconnectTarget sendSql dbNow getDbNameByDsn sqlDbAction createSqlDb dropSqlDb quotesql - testDsnForTables + testDsnForTables testDbServer ); + +use libp qw( croak ); +use DBI; +use Data::Dumper; + use constant SQL_INSERT => 10; use constant SQL_UPDATE => 11; +use constant SQL_SELECT => 12; my $dbmeta_ref_cache; @@ -48,6 +69,23 @@ } } +sub testDbServer { + my $dsn = shift; + $dsn =~ s/database=(\w+)//; + + #print "testDbServer: $dsn", "\n"; + + my $result; + if ( my $dbh = DBI->connect($dsn, '', '', { + PrintError => 0, + } ) ) { + $dbh->disconnect(); + return 1; + } +} + + +# TODO: handle usage of "$crit" in an abstract way somehow sub hash2Sql { my $table = shift; @@ -56,11 +94,16 @@ my $crit = shift; my $sql; - if ($mode == SQL_INSERT) { - $sql = "INSERT INTO $table (#fields#) VALUES (#values#);"; - } - if ($mode == SQL_UPDATE) { - $sql = "UPDATE $table SET #fields-values# WHERE $crit;"; + $mode = SQL_SELECT if ($mode eq 'SQL_SELECT' || $mode eq 'SELECT'); + $mode = SQL_INSERT if ($mode eq 'SQL_INSERT' || $mode eq 'INSERT'); + $mode = SQL_UPDATE if ($mode eq 'SQL_UPDATE' || $mode eq 'UPDATE'); + + if ($mode == SQL_SELECT) { + $sql = "SELECT #fields# FROM $table WHERE $crit"; + } elsif ($mode == SQL_INSERT) { + $sql = "INSERT INTO $table (#fields#) VALUES (#values#)"; + } elsif ($mode == SQL_UPDATE) { + $sql = "UPDATE $table SET #fields-values# WHERE $crit"; } my (@fields, @values); @@ -121,11 +164,16 @@ sub disconnectTarget { #my $dbmeta = shift; + #print "disc\n"; #croak "please supply a \"dbmeta\"-hash" if (!$dbmeta); #$dbmeta = patch_dbmeta($dbmeta); #$dbmeta->{dbh} && $dbmeta->{dbh}->disconnect(); my $dbmeta = $dbmeta_ref_cache; - $dbmeta->{dbh} && $dbmeta->{dbh}->disconnect(); + #print Dumper($dbmeta); + #$dbmeta->{dbh} && $dbmeta->{dbh}->disconnect(); + $dbmeta->{dbh}->disconnect(); + undef($dbmeta->{dbh}); + undef($dbmeta); undef($dbmeta_ref_cache); } @@ -141,9 +189,10 @@ return 0; } if (my $result = $dbmeta_ref->{dbh}->prepare($sql)) { - if ($result->execute()) { + #if ($result->execute()) { + $result->execute(); return $result; - } + #} } } @@ -173,8 +222,10 @@ my $bool_ok; if (connectTarget($dbmeta)) { sendSql($sql); - #print "state: ", $dbmeta->{dbh}->errstr, "\n"; - $bool_ok = ($dbmeta->{dbh} && $dbmeta->{dbh}->state && !$dbmeta->{dbh}->err); + #print "state: ", $dbmeta->{dbh}->state, "\n"; + #print "err ", $dbmeta->{dbh}->err, "\n"; + #$bool_ok = ($dbmeta->{dbh} && $dbmeta->{dbh}->state && !$dbmeta->{dbh}->err); + $bool_ok = ($dbmeta->{dbh} && !$dbmeta->{dbh}->err); disconnectTarget($dbmeta); } return $bool_ok; @@ -187,11 +238,12 @@ my $sql; $sql = "CREATE DATABASE $dbname;"; if ( sqlDbAction($dsn, $sql) ) { - print "ok"; + print "ok", "\n"; + return 1; } else { - print "failed"; + print "failed", "\n"; + return 0; } - print "\n"; } sub dropSqlDb { @@ -205,7 +257,9 @@ sub quotesql { my $string = shift; - $string =~ s/'/\\'/g; + if ($string) { + $string =~ s/'/\\'/g; + } return $string; } @@ -219,4 +273,4 @@ return 1 if ($bool_tablesHere); } -1; \ No newline at end of file +1;