/[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.1 by cvsjoko, Fri Jul 19 18:14:03 2002 UTC revision 1.10 by joko, Tue Apr 8 23:07:57 2003 UTC
# Line 2  Line 2 
2  ##    $Id$  ##    $Id$
3  ##    --------------------------------------------------------------------------------  ##    --------------------------------------------------------------------------------
4  ##    $Log$  ##    $Log$
5    ##    Revision 1.10  2003/04/08 23:07:57  joko
6    ##    renamed core database helper functions
7    ##    moved 'hash2Sql' and 'quotesql' to shortcuts::db
8    ##
9    ##    Revision 1.9  2003/02/09 04:47:58  joko
10    ##    + minor fix
11    ##
12    ##    Revision 1.8  2002/12/12 02:48:58  joko
13    ##    + played with fixing disconnectTarget
14    ##
15    ##    Revision 1.7  2002/12/01 22:13:17  joko
16    ##    + minor bugfix?
17    ##
18    ##    Revision 1.6  2002/11/29 04:53:39  joko
19    ##    + hash2Sql now knows about SQL_SELECT
20    ##
21    ##    Revision 1.5  2002/11/17 07:18:38  joko
22    ##    + small modification in hash2sql
23    ##
24    ##    Revision 1.4  2002/10/16 22:36:42  joko
25    ##    + sub testDbServer
26    ##
27    ##    Revision 1.3  2002/07/27 00:28:20  cvsjoko
28    ##    bugfixes
29    ##
30    ##    Revision 1.2  2002/07/20 11:09:58  cvsjoko
31    ##    + bugfixes
32    ##    + dont' print sql-errors
33    ##
34  ##    Revision 1.1  2002/07/19 18:14:03  cvsjoko  ##    Revision 1.1  2002/07/19 18:14:03  cvsjoko
35  ##    no message  ##    no message
36  ##  ##
# Line 13  package libdb; Line 42  package libdb;
42  use strict;  use strict;
43  use warnings;  use warnings;
44    
 use libp;  
 use DBI;  
   
45  require Exporter;  require Exporter;
46  our @ISA = qw( Exporter );  our @ISA = qw( Exporter );
47  our @EXPORT = qw(  our @EXPORT_OK = qw(
48                                testDsn hash2Sql                                testDsn
                               SQL_INSERT SQL_UPDATE  
49                                connectTarget disconnectTarget sendSql                                connectTarget disconnectTarget sendSql
50                                dbNow                                dbNow
51                                getDbNameByDsn sqlDbAction createSqlDb dropSqlDb                                dsn2dbname sqlDbAction createSqlDb dropSqlDb
52                                quotesql                                testDsnForTables testDbServer
                               testDsnForTables  
53                                );                                );
54    
55  use constant SQL_INSERT => 10;  
56  use constant SQL_UPDATE => 11;  use Carp;
57    use DBI;
58    use Data::Dumper;
59    
60    use shortcuts::db qw( dsn2dbname );
61    
62  my $dbmeta_ref_cache;  my $dbmeta_ref_cache;
63    
# Line 44  sub testDsn { Line 72  sub testDsn {
72    }    }
73  }  }
74    
75  sub hash2Sql {  sub testDbServer {
76        my $dsn = shift;
77    my $table = shift;    $dsn =~ s/database=(\w+)//;
   my $hash = shift;  
   my $mode = shift;  
   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;";  
   }  
78        
79    my (@fields, @values);    #print "testDbServer: $dsn", "\n";
   foreach my $key (keys %{$hash}) {  
     push @fields, $key;  
     push @values, $hash->{$key};  
   }  
   # quote each element  
   map { if (defined $_) { $_ = "'$_'" } else { $_ = "null" } } @values;  
80        
81    my $fields = join(', ', @fields);    my $result;
82    my $values = join(', ', @values);    if ( my $dbh = DBI->connect($dsn, '', '', {
83    my $fields_values = '';                                                        PrintError => 0,
84    my $fc = 0;                                                        } ) ) {
85    foreach (@fields) {      $dbh->disconnect();
86      $fields_values .= $_ . '=' . $values[$fc] . ', ';      return 1;
     $fc++;  
87    }    }
   $fields_values = substr($fields_values, 0, -2);  
     
   $sql =~ s/#fields#/$fields/;  
   $sql =~ s/#values#/$values/;  
   $sql =~ s/#fields-values#/$fields_values/;  
     
   return $sql;  
88  }  }
89    
90    
91    
92  sub patch_dbmeta {  sub patch_dbmeta {
93        
94    my $dbmeta = shift;    my $dbmeta = shift;
# Line 105  sub connectTarget { Line 110  sub connectTarget {
110    croak "please supply a dsn or a \"dbmeta\"-hash" if (!$dbmeta);    croak "please supply a dsn or a \"dbmeta\"-hash" if (!$dbmeta);
111    $dbmeta = patch_dbmeta($dbmeta);    $dbmeta = patch_dbmeta($dbmeta);
112    if (!$dbmeta->{connected}) {    if (!$dbmeta->{connected}) {
113      if ($dbmeta->{dbh} = DBI->connect($dbmeta->{dsn})) {      if ($dbmeta->{dbh} = DBI->connect($dbmeta->{dsn}, '', '', { PrintError => 0 } )) {
114        $dbmeta->{dbh}->trace($dbmeta->{trace_level}, $dbmeta->{trace_file});        $dbmeta->{dbh}->trace($dbmeta->{trace_level}, $dbmeta->{trace_file});
115        $dbmeta->{dbh}->{PrintError} = 0;        $dbmeta->{dbh}->{PrintError} = 0;
116        $dbmeta->{connected} = 1;        $dbmeta->{connected} = 1;
117        $dbmeta_ref_cache = $dbmeta;        $dbmeta_ref_cache = $dbmeta;
118          return 1;
119      }      }
120    }    }
121  }  }
122    
123  sub disconnectTarget {  sub disconnectTarget {
124    #my $dbmeta = shift;    #my $dbmeta = shift;
125      #print "disc\n";
126    #croak "please supply a \"dbmeta\"-hash" if (!$dbmeta);    #croak "please supply a \"dbmeta\"-hash" if (!$dbmeta);
127    #$dbmeta = patch_dbmeta($dbmeta);    #$dbmeta = patch_dbmeta($dbmeta);
128    #$dbmeta->{dbh} && $dbmeta->{dbh}->disconnect();    #$dbmeta->{dbh} && $dbmeta->{dbh}->disconnect();
129    my $dbmeta = $dbmeta_ref_cache;    my $dbmeta = $dbmeta_ref_cache;
130    $dbmeta->{dbh} && $dbmeta->{dbh}->disconnect();    #print Dumper($dbmeta);
131      #$dbmeta->{dbh} && $dbmeta->{dbh}->disconnect();
132      $dbmeta->{dbh}->disconnect();
133      undef($dbmeta->{dbh});
134      undef($dbmeta);
135    undef($dbmeta_ref_cache);    undef($dbmeta_ref_cache);
136  }  }
137    
# Line 136  sub sendSql { Line 147  sub sendSql {
147      return 0;      return 0;
148    }    }
149    if (my $result = $dbmeta_ref->{dbh}->prepare($sql)) {    if (my $result = $dbmeta_ref->{dbh}->prepare($sql)) {
150      if ($result->execute()) {      #if ($result->execute()) {
151          $result->execute();
152        return $result;        return $result;
153      }      #}
154    }    }
155  }  }
156    
# Line 149  sub dbNow { Line 161  sub dbNow {
161  }  }
162    
163    
 sub getDbNameByDsn {  
   my $dsn = shift;  
   $dsn =~ m/database=(.+?);/;  
   my $database_name = $1;  
   return $database_name;  
 }  
   
164  sub sqlDbAction {  sub sqlDbAction {
165    my $dsn = shift;    my $dsn = shift;
166    $dsn =~ s/database=.+?;//;    $dsn =~ s/database=.+?;//;
# Line 165  sub sqlDbAction { Line 170  sub sqlDbAction {
170      trace_level => 1,      trace_level => 1,
171      trace_file => 'dbitrace',      trace_file => 'dbitrace',
172    };    };
173    connectTarget($dbmeta);    my $bool_ok;
174    sendSql($sql);    if (connectTarget($dbmeta)) {
175    disconnectTarget($dbmeta);      sendSql($sql);
176        #print "state: ", $dbmeta->{dbh}->state, "\n";
177        #print "err    ", $dbmeta->{dbh}->err, "\n";
178        #$bool_ok = ($dbmeta->{dbh} && $dbmeta->{dbh}->state && !$dbmeta->{dbh}->err);
179        $bool_ok = ($dbmeta->{dbh} && !$dbmeta->{dbh}->err);
180        disconnectTarget($dbmeta);
181      }
182      return $bool_ok;
183  }  }
184    
185  sub createSqlDb {  sub createSqlDb {
186    my $dsn = shift;    my $dsn = shift;
187    my $dbname = getDbNameByDsn($dsn);    my $dbname = dsn2dbname($dsn);
188    print "  - creating database $dbname", "\n";    print "  - creating rdbms-database $dbname ($dsn) ...";
189    my $sql;    my $sql;
190    $sql = "CREATE DATABASE $dbname;";    $sql = "CREATE DATABASE $dbname;";
191    sqlDbAction($dsn, $sql);    if ( sqlDbAction($dsn, $sql) ) {
192        print "ok", "\n";
193        return 1;
194      } else {
195        print "failed", "\n";
196        return 0;
197      }
198  }  }
199    
200  sub dropSqlDb {  sub dropSqlDb {
201    my $dsn = shift;    my $dsn = shift;
202    my $dbname = getDbNameByDsn($dsn);    my $dbname = dsn2dbname($dsn);
203    print "  - dropping database $dbname", "\n";    print "  - dropping database $dbname", "\n";
204    my $sql;    my $sql;
205    $sql = "DROP DATABASE $dbname;";    $sql = "DROP DATABASE $dbname;";
206    sqlDbAction($dsn, $sql);    sqlDbAction($dsn, $sql);
207  }  }
208    
 sub quotesql {  
   my $string = shift;  
   $string =~ s/'/\\'/g;  
   return $string;  
 }  
   
209  sub testDsnForTables {  sub testDsnForTables {
210    my $dsn = shift;    my $dsn = shift;
211    connectTarget($dsn);    connectTarget($dsn);
# Line 203  sub testDsnForTables { Line 216  sub testDsnForTables {
216    return 1 if ($bool_tablesHere);    return 1 if ($bool_tablesHere);
217  }  }
218    
 1;  
219    1;

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.10

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