/[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.2 by cvsjoko, Sat Jul 20 11:09:58 2002 UTC revision 1.8 by joko, Thu Dec 12 02:48:58 2002 UTC
# Line 2  Line 2 
2  ##    $Id$  ##    $Id$
3  ##    --------------------------------------------------------------------------------  ##    --------------------------------------------------------------------------------
4  ##    $Log$  ##    $Log$
5    ##    Revision 1.8  2002/12/12 02:48:58  joko
6    ##    + played with fixing disconnectTarget
7    ##
8    ##    Revision 1.7  2002/12/01 22:13:17  joko
9    ##    + minor bugfix?
10    ##
11    ##    Revision 1.6  2002/11/29 04:53:39  joko
12    ##    + hash2Sql now knows about SQL_SELECT
13    ##
14    ##    Revision 1.5  2002/11/17 07:18:38  joko
15    ##    + small modification in hash2sql
16    ##
17    ##    Revision 1.4  2002/10/16 22:36:42  joko
18    ##    + sub testDbServer
19    ##
20    ##    Revision 1.3  2002/07/27 00:28:20  cvsjoko
21    ##    bugfixes
22    ##
23  ##    Revision 1.2  2002/07/20 11:09:58  cvsjoko  ##    Revision 1.2  2002/07/20 11:09:58  cvsjoko
24  ##    + bugfixes  ##    + bugfixes
25  ##    + dont' print sql-errors  ##    + dont' print sql-errors
# Line 17  package libdb; Line 35  package libdb;
35  use strict;  use strict;
36  use warnings;  use warnings;
37    
 use libp;  
 use DBI;  
   
38  require Exporter;  require Exporter;
39  our @ISA = qw( Exporter );  our @ISA = qw( Exporter );
40  our @EXPORT = qw(  our @EXPORT_OK = qw(
41                                testDsn hash2Sql                                testDsn hash2Sql
42                                SQL_INSERT SQL_UPDATE                                SQL_INSERT SQL_UPDATE
43                                connectTarget disconnectTarget sendSql                                connectTarget disconnectTarget sendSql
44                                dbNow                                dbNow
45                                getDbNameByDsn sqlDbAction createSqlDb dropSqlDb                                getDbNameByDsn sqlDbAction createSqlDb dropSqlDb
46                                quotesql                                quotesql
47                                testDsnForTables                                testDsnForTables testDbServer
48                                );                                );
49    
50    
51    use libp qw( croak );
52    use DBI;
53    use Data::Dumper;
54    
55  use constant SQL_INSERT => 10;  use constant SQL_INSERT => 10;
56  use constant SQL_UPDATE => 11;  use constant SQL_UPDATE => 11;
57    use constant SQL_SELECT => 12;
58    
59  my $dbmeta_ref_cache;  my $dbmeta_ref_cache;
60    
# Line 48  sub testDsn { Line 69  sub testDsn {
69    }    }
70  }  }
71    
72    sub testDbServer {
73      my $dsn = shift;
74      $dsn =~ s/database=(\w+)//;
75      
76      #print "testDbServer: $dsn", "\n";
77      
78      my $result;
79      if ( my $dbh = DBI->connect($dsn, '', '', {
80                                                          PrintError => 0,
81                                                          } ) ) {
82        $dbh->disconnect();
83        return 1;
84      }
85    }
86    
87    
88    # TODO: handle usage of "$crit" in an abstract way somehow
89  sub hash2Sql {  sub hash2Sql {
90        
91    my $table = shift;    my $table = shift;
# Line 56  sub hash2Sql { Line 94  sub hash2Sql {
94    my $crit = shift;    my $crit = shift;
95        
96    my $sql;    my $sql;
97    if ($mode == SQL_INSERT) {    $mode = SQL_SELECT if ($mode eq 'SQL_SELECT' || $mode eq 'SELECT');
98      $sql = "INSERT INTO $table (#fields#) VALUES (#values#);";    $mode = SQL_INSERT if ($mode eq 'SQL_INSERT' || $mode eq 'INSERT');
99    }    $mode = SQL_UPDATE if ($mode eq 'SQL_UPDATE' || $mode eq 'UPDATE');
100    if ($mode == SQL_UPDATE) {  
101      $sql = "UPDATE $table SET #fields-values# WHERE $crit;";    if ($mode == SQL_SELECT) {
102        $sql = "SELECT #fields# FROM $table WHERE $crit";
103      } elsif ($mode == SQL_INSERT) {
104        $sql = "INSERT INTO $table (#fields#) VALUES (#values#)";
105      } elsif ($mode == SQL_UPDATE) {
106        $sql = "UPDATE $table SET #fields-values# WHERE $crit";
107    }    }
108        
109    my (@fields, @values);    my (@fields, @values);
# Line 121  sub connectTarget { Line 164  sub connectTarget {
164    
165  sub disconnectTarget {  sub disconnectTarget {
166    #my $dbmeta = shift;    #my $dbmeta = shift;
167      #print "disc\n";
168    #croak "please supply a \"dbmeta\"-hash" if (!$dbmeta);    #croak "please supply a \"dbmeta\"-hash" if (!$dbmeta);
169    #$dbmeta = patch_dbmeta($dbmeta);    #$dbmeta = patch_dbmeta($dbmeta);
170    #$dbmeta->{dbh} && $dbmeta->{dbh}->disconnect();    #$dbmeta->{dbh} && $dbmeta->{dbh}->disconnect();
171    my $dbmeta = $dbmeta_ref_cache;    my $dbmeta = $dbmeta_ref_cache;
172    $dbmeta->{dbh} && $dbmeta->{dbh}->disconnect();    #print Dumper($dbmeta);
173      #$dbmeta->{dbh} && $dbmeta->{dbh}->disconnect();
174      $dbmeta->{dbh}->disconnect();
175      undef($dbmeta->{dbh});
176      undef($dbmeta);
177    undef($dbmeta_ref_cache);    undef($dbmeta_ref_cache);
178  }  }
179    
# Line 141  sub sendSql { Line 189  sub sendSql {
189      return 0;      return 0;
190    }    }
191    if (my $result = $dbmeta_ref->{dbh}->prepare($sql)) {    if (my $result = $dbmeta_ref->{dbh}->prepare($sql)) {
192      if ($result->execute()) {      #if ($result->execute()) {
193          $result->execute();
194        return $result;        return $result;
195      }      #}
196    }    }
197  }  }
198    
# Line 173  sub sqlDbAction { Line 222  sub sqlDbAction {
222    my $bool_ok;    my $bool_ok;
223    if (connectTarget($dbmeta)) {    if (connectTarget($dbmeta)) {
224      sendSql($sql);      sendSql($sql);
225      #print "state: ", $dbmeta->{dbh}->errstr, "\n";      #print "state: ", $dbmeta->{dbh}->state, "\n";
226      $bool_ok = ($dbmeta->{dbh} && $dbmeta->{dbh}->state && !$dbmeta->{dbh}->err);      #print "err    ", $dbmeta->{dbh}->err, "\n";
227        #$bool_ok = ($dbmeta->{dbh} && $dbmeta->{dbh}->state && !$dbmeta->{dbh}->err);
228        $bool_ok = ($dbmeta->{dbh} && !$dbmeta->{dbh}->err);
229      disconnectTarget($dbmeta);      disconnectTarget($dbmeta);
230    }    }
231    return $bool_ok;    return $bool_ok;
# Line 187  sub createSqlDb { Line 238  sub createSqlDb {
238    my $sql;    my $sql;
239    $sql = "CREATE DATABASE $dbname;";    $sql = "CREATE DATABASE $dbname;";
240    if ( sqlDbAction($dsn, $sql) ) {    if ( sqlDbAction($dsn, $sql) ) {
241      print "ok";      print "ok", "\n";
242        return 1;
243    } else {    } else {
244      print "failed";      print "failed", "\n";
245        return 0;
246    }    }
   print "\n";  
247  }  }
248    
249  sub dropSqlDb {  sub dropSqlDb {
# Line 205  sub dropSqlDb { Line 257  sub dropSqlDb {
257    
258  sub quotesql {  sub quotesql {
259    my $string = shift;    my $string = shift;
260    $string =~ s/'/\\'/g;    if ($string) {
261        $string =~ s/'/\\'/g;
262      }
263    return $string;    return $string;
264  }  }
265    
# Line 219  sub testDsnForTables { Line 273  sub testDsnForTables {
273    return 1 if ($bool_tablesHere);    return 1 if ($bool_tablesHere);
274  }  }
275    
 1;  
276    1;

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.8

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