Debugmechanismus leicht verbessert.
[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 dump_query quote_db_date);
7
8 sub conv_i {
9   my ($value, $default) = @_;
10   return (defined($value) && "$value" ne "") ? $value * 1 : $default;
11 }
12
13 sub conv_date {
14   my ($value) = @_;
15   return (defined($value) && "$value" ne "") ? $value : undef;
16 }
17
18 sub conv_dateq {
19   my ($value) = @_;
20   if (defined($value) && "$value" ne "") {
21     $value =~ s/\'/\'\'/g;
22     return "'$value'";
23   }
24   return "NULL";
25 }
26
27 sub do_query {
28   my ($form, $dbh, $query) = splice(@_, 0, 3);
29
30   if (0 == scalar(@_)) {
31     $dbh->do($query) || $form->dberror($query);
32   } else {
33     $dbh->do($query, undef, @_) ||
34       $form->dberror($query . " (" . join(", ", @_) . ")");
35   }
36   dump_query(LXDebug::QUERY, '', $query . " (" . join(", ", @_) . ")");
37 }
38
39 sub selectrow_query {
40   my ($form, $dbh, $query) = splice(@_, 0, 3);
41
42   if (0 == scalar(@_)) {
43     my @results = $dbh->selectrow_array($query);
44     $form->dberror($query) if ($dbh->err);
45     return @results;
46   } else {
47     my @results = $dbh->selectrow_array($query, undef, @_);
48     $form->dberror($query . " (" . join(", ", @_) . ")") if ($dbh->err);
49     return @results;
50   }
51 }
52
53 sub do_statement {
54   my ($form, $sth, $query) = splice(@_, 0, 3);
55
56   if (0 == scalar(@_)) {
57     $sth->execute() || $form->dberror($query);
58   } else {
59     $sth->execute(@_) ||
60       $form->dberror($query . " (" . join(", ", @_) . ")");
61   }
62 }
63
64 sub dump_query {
65   my ($level, $msg, $query) = splice(@_, 0, 3);
66   while ($query =~ /\?/) {
67     my $value = shift(@_);
68     $value =~ s/\'/\\\'/g;
69     $value = "'${value}'";
70     $query =~ s/\?/$value/;
71   }
72
73   $msg .= " " if ($msg);
74
75   $main::lxdebug->message($level, $msg . $query);
76 }
77
78 sub quote_db_date {
79   my ($str) = @_;
80   return "NULL" unless defined $str;
81   return "current_date" if $str =~ /current_date/;
82   $str =~ s/'/''/g;
83   return "'$str'";
84 }
85
86 1;