SL::DBUtils etwas verbessert. Bei jedem Query wird geprüft ob der Debugmodus
[kivitendo-erp.git] / SL / DBUtils.pm
1 package SL::DBUtils;
2
3 require Exporter;
4 @ISA = qw(Exporter);
5
6 @EXPORT = qw(conv_i conv_date conv_dateq do_query selectrow_query do_statement
7              dump_query quote_db_date selectall_hashref_query 
8              selectfirst_hashref_query selectfirst_array_query 
9              prepare_execute_query);
10
11 sub conv_i {
12   my ($value, $default) = @_;
13   return (defined($value) && "$value" ne "") ? $value * 1 : $default;
14 }
15
16 sub conv_date {
17   my ($value) = @_;
18   return (defined($value) && "$value" ne "") ? $value : undef;
19 }
20
21 sub conv_dateq {
22   my ($value) = @_;
23   if (defined($value) && "$value" ne "") {
24     $value =~ s/\'/\'\'/g;
25     return "'$value'";
26   }
27   return "NULL";
28 }
29
30 sub do_query {
31   my ($form, $dbh, $query) = splice(@_, 0, 3);
32
33   dump_query(LXDebug::QUERY, '', $query . " (" . join(", ", @_) . ")", @_);
34
35   if (0 == scalar(@_)) {
36     $dbh->do($query) || $form->dberror($query);
37   } else {
38     $dbh->do($query, undef, @_) ||
39       $form->dberror($query . " (" . join(", ", @_) . ")");
40   }
41 }
42
43 sub selectrow_query { &selectfirst_array_query }
44
45 sub do_statement {
46   my ($form, $sth, $query) = splice(@_, 0, 3);
47
48   dump_query(LXDebug::QUERY, '', $query . " (" . join(", ", @_) . ")", @_);
49
50   if (0 == scalar(@_)) {
51     $sth->execute() || $form->dberror($query);
52   } else {
53     $sth->execute(@_) ||
54       $form->dberror($query . " (" . join(", ", @_) . ")");
55   }
56 }
57
58 sub dump_query {
59   my ($level, $msg, $query) = splice(@_, 0, 3);
60
61   while ($query =~ /\?/) {
62     my $value = shift(@_);
63     $value =~ s/\'/\\\'/g;
64     $value = "'${value}'";
65     $query =~ s/\?/$value/;
66   }
67
68   $query =~ s/[\n\s]+/ /g;
69
70   $msg .= " " if ($msg);
71
72   $main::lxdebug->message($level, $msg . $query);
73 }
74
75 sub quote_db_date {
76   my ($str) = @_;
77
78   return "NULL" unless defined $str;
79   return "current_date" if $str =~ /current_date/;
80
81   $str =~ s/'/''/g;
82   return "'$str'";
83 }
84
85 sub prepare_execute_query {
86   my ($form, $dbh, $query) = splice(@_, 0, 3);
87
88   dump_query(LXDebug::QUERY, '', $query . " (" . join(", ", @_) . ")", @_);
89
90   my $sth = $dbh->prepare($query) || $form->dberror($query);
91   if (scalar(@_) != 0) {
92     $sth->execute(@_) || $form->dberror($query . " (" . join(", ", @_) . ")");
93   } else {
94     $sth->execute() || $form->dberror($query);
95   }
96
97   return $sth;
98 }
99
100 sub selectall_hashref_query {
101   my ($form, $dbh, $query) = splice(@_, 0, 3);
102
103   dump_query(LXDebug::QUERY, '', $query . " (" . join(", ", @_) . ")", @_);
104
105   my $sth = prepare_execute_query($form, $dbh, $query, @_);
106   my $result = [];
107   while (my $ref = $sth->fetchrow_hashref()) {
108     push(@{ $result }, $ref);
109   }
110   $sth->finish();
111
112   return $result;
113 }
114
115 sub selectfirst_hashref_query {
116   my ($form, $dbh, $query) = splice(@_, 0, 3);
117
118   dump_query(LXDebug::QUERY, '', $query . " (" . join(", ", @_) . ")", @_);
119
120   my $sth = prepare_execute_query($form, $dbh, $query, @_);
121   my $ref = $sth->fetchrow_hashref();
122   $sth->finish();
123
124   return $ref;
125 }
126
127 sub selectfirst_array_query {
128   my ($form, $dbh, $query) = splice(@_, 0, 3);
129
130   dump_query(LXDebug::QUERY, '', $query . " (" . join(", ", @_) . ")", @_);
131
132   my $sth = prepare_execute_query($form, $dbh, $query, @_);
133   my @ret = $sth->fetchrow_array();
134   $sth->finish();
135
136   return @ret;
137 }
138
139 1;
140
141
142 __END__
143
144 =head1 NAME
145
146 SL::DBUTils.pm: All about Databaseconections in Lx
147
148 =head1 SYNOPSIS
149
150   use DBUtils;
151   
152   conv_i
153   conv_date
154   conv_dateq
155   quote_db_date($str)
156
157   do_query($form, $dbh, $query)
158   do_statement($form, $sth, $query)
159
160   dump_query($level, $msg, $query)
161   prepare_execute_query($form, $dbh, $query)
162
163   my $all_results_ref       = selectall_hashref_query($form, $dbh, $query)
164   my $first_result_hash_ref = selectfirst_hashref_query($form, $dbh, $query);
165   
166   my @first_result =  selectfirst_array_query($form, $dbh, $query);  # ==
167   my @first_result =  selectrow_query($form, $dbh, $query);
168   
169     
170 =head1 DESCRIPTION
171   
172 =head1 FUNCTIONS
173   
174 =over 4
175   
176 =item conv_i
177
178 =item conv_date
179
180 =item conv_dateq
181
182 =item quote_db_date($str)
183
184 =item do_query($form, $dbh, $query)
185
186 =item do_statement($form, $sth, $query)
187
188 =item dump_query($level, $msg, $query)
189
190 =item prepare_execute_query($form, $dbh, $query)
191
192 =item selectall_hashref_query($form, $dbh, $query)
193
194 =item selectfirst_hashref_query($form, $dbh, $query);
195
196 =item selectfirst_array_query($form, $dbh, $query);  # ==
197
198 =item selectrow_query($form, $dbh, $query);
199   
200 =back
201   
202 =head1 EXAMPLE
203
204 =head1 SEE ALSO
205
206 =head1 MODULE AUTHORS
207
208 Sven Schoeling
209  
210 =head1 DOCUMENTATION AUTHORS
211
212 Udo Spallek  E<lt>udono@gmx.netE<gt>
213
214 =head1 COPYRIGHT AND LICENSE
215
216 Copyright 2007 by Lx-Office Community
217
218 This program is free software; you can redistribute it and/or modify
219 it under the terms of the GNU General Public License as published by
220 the Free Software Foundation; either version 2 of the License, or
221 (at your option) any later version.
222
223 This program is distributed in the hope that it will be useful,
224 but WITHOUT ANY WARRANTY; without even the implied warranty of
225 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
226 GNU General Public License for more details.
227 You should have received a copy of the GNU General Public License
228 along with this program; if not, write to the Free Software
229 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
230 =cut