/[cvs]/nfo/perl/libs/libdb.pm
ViewVC logotype

Diff of /nfo/perl/libs/libdb.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by cvsjoko, Sat Jul 27 00:28:20 2002 UTC revision 1.11 by joko, Wed Apr 9 07:53:33 2003 UTC
# Line 2  Line 2 
2  ##    $Id$  ##    $Id$
3  ##    --------------------------------------------------------------------------------  ##    --------------------------------------------------------------------------------
4  ##    $Log$  ##    $Log$
5    ##    Revision 1.11  2003/04/09 07:53:33  joko
6    ##    minor namespace update
7    ##
8    ##    Revision 1.10  2003/04/08 23:07:57  joko
9    ##    renamed core database helper functions
10    ##    moved 'hash2Sql' and 'quotesql' to shortcuts::db
11    ##
12    ##    Revision 1.9  2003/02/09 04:47:58  joko
13    ##    + minor fix
14    ##
15    ##    Revision 1.8  2002/12/12 02:48:58  joko
16    ##    + played with fixing disconnectTarget
17    ##
18    ##    Revision 1.7  2002/12/01 22:13:17  joko
19    ##    + minor bugfix?
20    ##
21    ##    Revision 1.6  2002/11/29 04:53:39  joko
22    ##    + hash2Sql now knows about SQL_SELECT
23    ##
24    ##    Revision 1.5  2002/11/17 07:18:38  joko
25    ##    + small modification in hash2sql
26    ##
27    ##    Revision 1.4  2002/10/16 22:36:42  joko
28    ##    + sub testDbServer
29    ##
30  ##    Revision 1.3  2002/07/27 00:28:20  cvsjoko  ##    Revision 1.3  2002/07/27 00:28:20  cvsjoko
31  ##    bugfixes  ##    bugfixes
32  ##  ##
# Line 20  package libdb; Line 45  package libdb;
45  use strict;  use strict;
46  use warnings;  use warnings;
47    
 use libp;  
 use DBI;  
   
48  require Exporter;  require Exporter;
49  our @ISA = qw( Exporter );  our @ISA = qw( Exporter );
50  our @EXPORT = qw(  our @EXPORT_OK = qw(
51                                testDsn hash2Sql                                testDsn
                               SQL_INSERT SQL_UPDATE  
52                                connectTarget disconnectTarget sendSql                                connectTarget disconnectTarget sendSql
53                                dbNow                                dbNow
54                                getDbNameByDsn sqlDbAction createSqlDb dropSqlDb                                dsn2dbname sqlDbAction createSqlDb dropSqlDb
55                                quotesql                                testDsnForTables testDbServer
                               testDsnForTables  
56                                );                                );
57    
58  use constant SQL_INSERT => 10;  
59  use constant SQL_UPDATE => 11;  use Carp;
60    use DBI;
61    use Data::Dumper;
62    
63    use shortcuts::database qw( dsn2dbname );
64    
65  my $dbmeta_ref_cache;  my $dbmeta_ref_cache;
66    
# Line 51  sub testDsn { Line 75  sub testDsn {
75    }    }
76  }  }
77    
78  sub hash2Sql {  sub testDbServer {
79      my $dsn = shift;
80      $dsn =~ s/database=(\w+)//;
81        
82    my $table = shift;    #print "testDbServer: $dsn", "\n";
   my $hash = shift;  
   my $mode = shift;  
   my $crit = shift;  
83        
84    my $sql;    my $result;
85    if ($mode == SQL_INSERT) {    if ( my $dbh = DBI->connect($dsn, '', '', {
86      $sql = "INSERT INTO $table (#fields#) VALUES (#values#);";                                                        PrintError => 0,
87    }                                                        } ) ) {
88    if ($mode == SQL_UPDATE) {      $dbh->disconnect();
89      $sql = "UPDATE $table SET #fields-values# WHERE $crit;";      return 1;
   }  
     
   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++;  
90    }    }
   $fields_values = substr($fields_values, 0, -2);  
     
   $sql =~ s/#fields#/$fields/;  
   $sql =~ s/#values#/$values/;  
   $sql =~ s/#fields-values#/$fields_values/;  
     
   return $sql;  
91  }  }
92    
93    
94    
95  sub patch_dbmeta {  sub patch_dbmeta {
96        
97    my $dbmeta = shift;    my $dbmeta = shift;
# Line 124  sub connectTarget { Line 125  sub connectTarget {
125    
126  sub disconnectTarget {  sub disconnectTarget {
127    #my $dbmeta = shift;    #my $dbmeta = shift;
128      #print "disc\n";
129    #croak "please supply a \"dbmeta\"-hash" if (!$dbmeta);    #croak "please supply a \"dbmeta\"-hash" if (!$dbmeta);
130    #$dbmeta = patch_dbmeta($dbmeta);    #$dbmeta = patch_dbmeta($dbmeta);
131    #$dbmeta->{dbh} && $dbmeta->{dbh}->disconnect();    #$dbmeta->{dbh} && $dbmeta->{dbh}->disconnect();
132    my $dbmeta = $dbmeta_ref_cache;    my $dbmeta = $dbmeta_ref_cache;
133    $dbmeta->{dbh} && $dbmeta->{dbh}->disconnect();    #print Dumper($dbmeta);
134      #$dbmeta->{dbh} && $dbmeta->{dbh}->disconnect();
135      $dbmeta->{dbh}->disconnect();
136      undef($dbmeta->{dbh});
137      undef($dbmeta);
138    undef($dbmeta_ref_cache);    undef($dbmeta_ref_cache);
139  }  }
140    
# Line 144  sub sendSql { Line 150  sub sendSql {
150      return 0;      return 0;
151    }    }
152    if (my $result = $dbmeta_ref->{dbh}->prepare($sql)) {    if (my $result = $dbmeta_ref->{dbh}->prepare($sql)) {
153      if ($result->execute()) {      #if ($result->execute()) {
154          $result->execute();
155        return $result;        return $result;
156      }      #}
157    }    }
158  }  }
159    
# Line 157  sub dbNow { Line 164  sub dbNow {
164  }  }
165    
166    
 sub getDbNameByDsn {  
   my $dsn = shift;  
   $dsn =~ m/database=(.+?);/;  
   my $database_name = $1;  
   return $database_name;  
 }  
   
167  sub sqlDbAction {  sub sqlDbAction {
168    my $dsn = shift;    my $dsn = shift;
169    $dsn =~ s/database=.+?;//;    $dsn =~ s/database=.+?;//;
# Line 187  sub sqlDbAction { Line 187  sub sqlDbAction {
187    
188  sub createSqlDb {  sub createSqlDb {
189    my $dsn = shift;    my $dsn = shift;
190    my $dbname = getDbNameByDsn($dsn);    my $dbname = dsn2dbname($dsn);
191    print "  - creating rdbms-database $dbname ($dsn) ...";    print "  - creating rdbms-database $dbname ($dsn) ...";
192    my $sql;    my $sql;
193    $sql = "CREATE DATABASE $dbname;";    $sql = "CREATE DATABASE $dbname;";
# Line 202  sub createSqlDb { Line 202  sub createSqlDb {
202    
203  sub dropSqlDb {  sub dropSqlDb {
204    my $dsn = shift;    my $dsn = shift;
205    my $dbname = getDbNameByDsn($dsn);    my $dbname = dsn2dbname($dsn);
206    print "  - dropping database $dbname", "\n";    print "  - dropping database $dbname", "\n";
207    my $sql;    my $sql;
208    $sql = "DROP DATABASE $dbname;";    $sql = "DROP DATABASE $dbname;";
209    sqlDbAction($dsn, $sql);    sqlDbAction($dsn, $sql);
210  }  }
211    
 sub quotesql {  
   my $string = shift;  
   $string =~ s/'/\\'/g;  
   return $string;  
 }  
   
212  sub testDsnForTables {  sub testDsnForTables {
213    my $dsn = shift;    my $dsn = shift;
214    connectTarget($dsn);    connectTarget($dsn);

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.11

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed