get_vendor auf aktuellen Stand gebracht.
[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   dump_query(LXDebug::QUERY, '', $query . " (" . join(", ", @_) . ")", @_);
33   if (0 == scalar(@_)) {
34     $dbh->do($query) || $form->dberror($query);
35   } else {
36     $dbh->do($query, undef, @_) ||
37       $form->dberror($query . " (" . join(", ", @_) . ")");
38   }
39 }
40
41 sub selectrow_query { &selectfirst_array_query }
42
43 sub do_statement {
44   my ($form, $sth, $query) = splice(@_, 0, 3);
45
46   if (0 == scalar(@_)) {
47     $sth->execute() || $form->dberror($query);
48   } else {
49     $sth->execute(@_) ||
50       $form->dberror($query . " (" . join(", ", @_) . ")");
51   }
52 }
53
54 sub dump_query {
55   my ($level, $msg, $query) = splice(@_, 0, 3);
56   while ($query =~ /\?/) {
57     my $value = shift(@_);
58     $value =~ s/\'/\\\'/g;
59     $value = "'${value}'";
60     $query =~ s/\?/$value/;
61   }
62
63   $msg .= " " if ($msg);
64
65   $main::lxdebug->message($level, $msg . $query);
66 }
67
68 sub quote_db_date {
69   my ($str) = @_;
70   return "NULL" unless defined $str;
71   return "current_date" if $str =~ /current_date/;
72   $str =~ s/'/''/g;
73   return "'$str'";
74 }
75
76 sub prepare_execute_query {
77   my ($form, $dbh, $query) = splice(@_, 0, 3);
78   my $sth = $dbh->prepare($query) || $form->dberror($query);
79   dump_query(LXDebug::QUERY, '', $query . " (" . join(", ", @_) . ")", @_);
80   if (scalar(@_) != 0) {
81     $sth->execute(@_) || $form->dberror($query . " (" . join(", ", @_) . ")");
82   } else {
83     $sth->execute() || $form->dberror($query);
84   }
85
86   return $sth;
87 }
88
89 sub selectall_hashref_query {
90   my ($form, $dbh, $query) = splice(@_, 0, 3);
91
92   my $sth = prepare_execute_query($form, $dbh, $query, @_);
93   my $result = [];
94   while (my $ref = $sth->fetchrow_hashref()) {
95     push(@{ $result }, $ref);
96   }
97   $sth->finish();
98
99   return $result;
100 }
101
102 sub selectfirst_hashref_query {
103   my ($form, $dbh, $query) = splice(@_, 0, 3);
104
105   my $sth = prepare_execute_query($form, $dbh, $query, @_);
106   my $ref = $sth->fetchrow_hashref();
107   $sth->finish();
108
109   return $ref;
110 }
111
112 sub selectfirst_array_query {
113   my ($form, $dbh, $query) = splice(@_, 0, 3);
114
115   my $sth = prepare_execute_query($form, $dbh, $query, @_);
116   my @ret = $sth->fetchrow_array();
117   $sth->finish();
118
119   return @ret;
120 }
121
122 1;