--- nfo/perl/libs/libdb.pm 2002/07/27 00:28:20 1.3 +++ nfo/perl/libs/libdb.pm 2003/04/09 07:53:33 1.11 @@ -1,7 +1,32 @@ ## -------------------------------------------------------------------------------- -## $Id: libdb.pm,v 1.3 2002/07/27 00:28:20 cvsjoko Exp $ +## $Id: libdb.pm,v 1.11 2003/04/09 07:53:33 joko Exp $ ## -------------------------------------------------------------------------------- ## $Log: libdb.pm,v $ +## Revision 1.11 2003/04/09 07:53:33 joko +## minor namespace update +## +## Revision 1.10 2003/04/08 23:07:57 joko +## renamed core database helper functions +## moved 'hash2Sql' and 'quotesql' to shortcuts::db +## +## Revision 1.9 2003/02/09 04:47:58 joko +## + minor fix +## +## 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 ## @@ -20,23 +45,22 @@ use strict; use warnings; -use libp; -use DBI; - require Exporter; our @ISA = qw( Exporter ); -our @EXPORT = qw( - testDsn hash2Sql - SQL_INSERT SQL_UPDATE +our @EXPORT_OK = qw( + testDsn connectTarget disconnectTarget sendSql dbNow - getDbNameByDsn sqlDbAction createSqlDb dropSqlDb - quotesql - testDsnForTables + dsn2dbname sqlDbAction createSqlDb dropSqlDb + testDsnForTables testDbServer ); -use constant SQL_INSERT => 10; -use constant SQL_UPDATE => 11; + +use Carp; +use DBI; +use Data::Dumper; + +use shortcuts::database qw( dsn2dbname ); my $dbmeta_ref_cache; @@ -51,46 +75,23 @@ } } -sub hash2Sql { +sub testDbServer { + my $dsn = shift; + $dsn =~ s/database=(\w+)//; - my $table = shift; - my $hash = shift; - my $mode = shift; - my $crit = shift; + #print "testDbServer: $dsn", "\n"; - 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;"; - } - - my (@fields, @values); - foreach my $key (keys %{$hash}) { - push @fields, $key; - push @values, $hash->{$key}; - } - # quote each element - map { if (defined $_) { $_ = "'$_'" } else { $_ = "null" } } @values; - - my $fields = join(', ', @fields); - my $values = join(', ', @values); - my $fields_values = ''; - my $fc = 0; - foreach (@fields) { - $fields_values .= $_ . '=' . $values[$fc] . ', '; - $fc++; + my $result; + if ( my $dbh = DBI->connect($dsn, '', '', { + PrintError => 0, + } ) ) { + $dbh->disconnect(); + return 1; } - $fields_values = substr($fields_values, 0, -2); - - $sql =~ s/#fields#/$fields/; - $sql =~ s/#values#/$values/; - $sql =~ s/#fields-values#/$fields_values/; - - return $sql; } + + sub patch_dbmeta { my $dbmeta = shift; @@ -124,11 +125,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); } @@ -144,9 +150,10 @@ return 0; } if (my $result = $dbmeta_ref->{dbh}->prepare($sql)) { - if ($result->execute()) { + #if ($result->execute()) { + $result->execute(); return $result; - } + #} } } @@ -157,13 +164,6 @@ } -sub getDbNameByDsn { - my $dsn = shift; - $dsn =~ m/database=(.+?);/; - my $database_name = $1; - return $database_name; -} - sub sqlDbAction { my $dsn = shift; $dsn =~ s/database=.+?;//; @@ -187,7 +187,7 @@ sub createSqlDb { my $dsn = shift; - my $dbname = getDbNameByDsn($dsn); + my $dbname = dsn2dbname($dsn); print " - creating rdbms-database $dbname ($dsn) ..."; my $sql; $sql = "CREATE DATABASE $dbname;"; @@ -202,19 +202,13 @@ sub dropSqlDb { my $dsn = shift; - my $dbname = getDbNameByDsn($dsn); + my $dbname = dsn2dbname($dsn); print " - dropping database $dbname", "\n"; my $sql; $sql = "DROP DATABASE $dbname;"; sqlDbAction($dsn, $sql); } -sub quotesql { - my $string = shift; - $string =~ s/'/\\'/g; - return $string; -} - sub testDsnForTables { my $dsn = shift; connectTarget($dsn);