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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations)
Fri Jul 19 18:14:03 2002 UTC (21 years, 9 months ago) by cvsjoko
Branch: MAIN
no message

1 ## --------------------------------------------------------------------------------
2 ## $Id$
3 ## --------------------------------------------------------------------------------
4 ## $Log$
5 ##
6 ## --------------------------------------------------------------------------------
7
8 package libdb;
9
10 use strict;
11 use warnings;
12
13 use libp;
14 use DBI;
15
16 require Exporter;
17 our @ISA = qw( Exporter );
18 our @EXPORT = qw(
19 testDsn hash2Sql
20 SQL_INSERT SQL_UPDATE
21 connectTarget disconnectTarget sendSql
22 dbNow
23 getDbNameByDsn sqlDbAction createSqlDb dropSqlDb
24 quotesql
25 testDsnForTables
26 );
27
28 use constant SQL_INSERT => 10;
29 use constant SQL_UPDATE => 11;
30
31 my $dbmeta_ref_cache;
32
33 sub testDsn {
34 my $dsn = shift;
35 my $result;
36 if ( my $dbh = DBI->connect($dsn, '', '', {
37 PrintError => 0,
38 } ) ) {
39 $dbh->disconnect();
40 return 1;
41 }
42 }
43
44 sub hash2Sql {
45
46 my $table = shift;
47 my $hash = shift;
48 my $mode = shift;
49 my $crit = shift;
50
51 my $sql;
52 if ($mode == SQL_INSERT) {
53 $sql = "INSERT INTO $table (#fields#) VALUES (#values#);";
54 }
55 if ($mode == SQL_UPDATE) {
56 $sql = "UPDATE $table SET #fields-values# WHERE $crit;";
57 }
58
59 my (@fields, @values);
60 foreach my $key (keys %{$hash}) {
61 push @fields, $key;
62 push @values, $hash->{$key};
63 }
64 # quote each element
65 map { if (defined $_) { $_ = "'$_'" } else { $_ = "null" } } @values;
66
67 my $fields = join(', ', @fields);
68 my $values = join(', ', @values);
69 my $fields_values = '';
70 my $fc = 0;
71 foreach (@fields) {
72 $fields_values .= $_ . '=' . $values[$fc] . ', ';
73 $fc++;
74 }
75 $fields_values = substr($fields_values, 0, -2);
76
77 $sql =~ s/#fields#/$fields/;
78 $sql =~ s/#values#/$values/;
79 $sql =~ s/#fields-values#/$fields_values/;
80
81 return $sql;
82 }
83
84 sub patch_dbmeta {
85
86 my $dbmeta = shift;
87
88 if ($dbmeta =~ m/^dbi:/) {
89 $dbmeta = {
90 dsn => $dbmeta,
91 trace_level => 0,
92 trace_file => undef,
93 };
94 }
95
96 return $dbmeta;
97
98 }
99
100 sub connectTarget {
101 my $dbmeta = shift;
102 croak "please supply a dsn or a \"dbmeta\"-hash" if (!$dbmeta);
103 $dbmeta = patch_dbmeta($dbmeta);
104 if (!$dbmeta->{connected}) {
105 if ($dbmeta->{dbh} = DBI->connect($dbmeta->{dsn})) {
106 $dbmeta->{dbh}->trace($dbmeta->{trace_level}, $dbmeta->{trace_file});
107 $dbmeta->{dbh}->{PrintError} = 0;
108 $dbmeta->{connected} = 1;
109 $dbmeta_ref_cache = $dbmeta;
110 }
111 }
112 }
113
114 sub disconnectTarget {
115 #my $dbmeta = shift;
116 #croak "please supply a \"dbmeta\"-hash" if (!$dbmeta);
117 #$dbmeta = patch_dbmeta($dbmeta);
118 #$dbmeta->{dbh} && $dbmeta->{dbh}->disconnect();
119 my $dbmeta = $dbmeta_ref_cache;
120 $dbmeta->{dbh} && $dbmeta->{dbh}->disconnect();
121 undef($dbmeta_ref_cache);
122 }
123
124 sub sendSql {
125 my $sql = shift;
126 my $dbmeta_ref = shift;
127 if (!$dbmeta_ref) {
128 $dbmeta_ref = $dbmeta_ref_cache;
129 }
130 #print "sql: $sql", "\n";
131 if (!$dbmeta_ref->{connected}) {
132 print "not connected!", "\n";
133 return 0;
134 }
135 if (my $result = $dbmeta_ref->{dbh}->prepare($sql)) {
136 if ($result->execute()) {
137 return $result;
138 }
139 }
140 }
141
142 sub dbNow {
143 #my $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime;
144 my $now_string = strftime("%Y-%m-%d %H:%M:%S", localtime);
145 return $now_string;
146 }
147
148
149 sub getDbNameByDsn {
150 my $dsn = shift;
151 $dsn =~ m/database=(.+?);/;
152 my $database_name = $1;
153 return $database_name;
154 }
155
156 sub sqlDbAction {
157 my $dsn = shift;
158 $dsn =~ s/database=.+?;//;
159 my $sql = shift;
160 my $dbmeta = {
161 dsn => $dsn,
162 trace_level => 1,
163 trace_file => 'dbitrace',
164 };
165 connectTarget($dbmeta);
166 sendSql($sql);
167 disconnectTarget($dbmeta);
168 }
169
170 sub createSqlDb {
171 my $dsn = shift;
172 my $dbname = getDbNameByDsn($dsn);
173 print " - creating database $dbname", "\n";
174 my $sql;
175 $sql = "CREATE DATABASE $dbname;";
176 sqlDbAction($dsn, $sql);
177 }
178 sub dropSqlDb {
179 my $dsn = shift;
180 my $dbname = getDbNameByDsn($dsn);
181 print " - dropping database $dbname", "\n";
182 my $sql;
183 $sql = "DROP DATABASE $dbname;";
184 sqlDbAction($dsn, $sql);
185 }
186
187 sub quotesql {
188 my $string = shift;
189 $string =~ s/'/\\'/g;
190 return $string;
191 }
192
193 sub testDsnForTables {
194 my $dsn = shift;
195 connectTarget($dsn);
196 my $result = sendSql('SHOW TABLES;');
197 my $bool_tablesHere = $result->fetchrow_hashref();
198 $result->finish();
199 disconnectTarget($dsn);
200 return 1 if ($bool_tablesHere);
201 }
202
203 1;

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