IS::get_customer auf neue DBUtils umgestellt,
[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 selectfirst_hashref_query
8              prepare_execute_query);
9
10 sub conv_i {
11   my ($value, $default) = @_;
12   return (defined($value) && "$value" ne "") ? $value * 1 : $default;
13 }
14
15 sub conv_date {
16   my ($value) = @_;
17   return (defined($value) && "$value" ne "") ? $value : undef;
18 }
19
20 sub conv_dateq {
21   my ($value) = @_;
22   if (defined($value) && "$value" ne "") {
23     $value =~ s/\'/\'\'/g;
24     return "'$value'";
25   }
26   return "NULL";
27 }
28
29 sub do_query {
30   my ($form, $dbh, $query) = splice(@_, 0, 3);
31
32   if (0 == scalar(@_)) {
33     $dbh->do($query) || $form->dberror($query);
34   } else {
35     $dbh->do($query, undef, @_) ||
36       $form->dberror($query . " (" . join(", ", @_) . ")");
37   }
38   dump_query(LXDebug::QUERY, '', $query . " (" . join(", ", @_) . ")");
39 }
40
41 sub selectrow_query {
42   my ($form, $dbh, $query) = splice(@_, 0, 3);
43
44   if (0 == scalar(@_)) {
45     my @results = $dbh->selectrow_array($query);
46     $form->dberror($query) if ($dbh->err);
47     return @results;
48   } else {
49     my @results = $dbh->selectrow_array($query, undef, @_);
50     $form->dberror($query . " (" . join(", ", @_) . ")") if ($dbh->err);
51     return @results;
52   }
53 }
54
55 sub do_statement {
56   my ($form, $sth, $query) = splice(@_, 0, 3);
57
58   if (0 == scalar(@_)) {
59     $sth->execute() || $form->dberror($query);
60   } else {
61     $sth->execute(@_) ||
62       $form->dberror($query . " (" . join(", ", @_) . ")");
63   }
64 }
65
66 sub dump_query {
67   my ($level, $msg, $query) = splice(@_, 0, 3);
68   while ($query =~ /\?/) {
69     my $value = shift(@_);
70     $value =~ s/\'/\\\'/g;
71     $value = "'${value}'";
72     $query =~ s/\?/$value/;
73   }
74
75   $msg .= " " if ($msg);
76
77   $main::lxdebug->message($level, $msg . $query);
78 }
79
80 sub quote_db_date {
81   my ($str) = @_;
82   return "NULL" unless defined $str;
83   return "current_date" if $str =~ /current_date/;
84   $str =~ s/'/''/g;
85   return "'$str'";
86 }
87
88 sub prepare_execute_query {
89   my ($form, $dbh, $query) = splice(@_, 0, 3);
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   my $sth = prepare_execute_query($form, $dbh, $query, @_);
104   my $result = [];
105   while (my $ref = $sth->fetchrow_hashref()) {
106     push(@{ $result }, $ref);
107   }
108   $sth->finish();
109
110   return $result;
111 }
112
113 sub selectfirst_hashref_query {
114   my ($form, $dbh, $query) = splice(@_, 0, 3);
115
116   my $sth = prepare_execute_query($form, $dbh, $query, @_);
117   my $ref = $sth->fetchrow_hashref();
118   $sth->finish();
119
120   return $ref;
121 }
122
123 1;