a4441027fe54c58fd068c3936600135bdd4f960e
[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   $query =~ s/[\n\s]+/ /g;
64
65   $msg .= " " if ($msg);
66
67   $main::lxdebug->message($level, $msg . $query);
68 }
69
70 sub quote_db_date {
71   my ($str) = @_;
72   return "NULL" unless defined $str;
73   return "current_date" if $str =~ /current_date/;
74   $str =~ s/'/''/g;
75   return "'$str'";
76 }
77
78 sub prepare_execute_query {
79   my ($form, $dbh, $query) = splice(@_, 0, 3);
80   my $sth = $dbh->prepare($query) || $form->dberror($query);
81   dump_query(LXDebug::QUERY, '', $query . " (" . join(", ", @_) . ")", @_);
82   if (scalar(@_) != 0) {
83     $sth->execute(@_) || $form->dberror($query . " (" . join(", ", @_) . ")");
84   } else {
85     $sth->execute() || $form->dberror($query);
86   }
87
88   return $sth;
89 }
90
91 sub selectall_hashref_query {
92   my ($form, $dbh, $query) = splice(@_, 0, 3);
93
94   my $sth = prepare_execute_query($form, $dbh, $query, @_);
95   my $result = [];
96   while (my $ref = $sth->fetchrow_hashref()) {
97     push(@{ $result }, $ref);
98   }
99   $sth->finish();
100
101   return $result;
102 }
103
104 sub selectfirst_hashref_query {
105   my ($form, $dbh, $query) = splice(@_, 0, 3);
106
107   my $sth = prepare_execute_query($form, $dbh, $query, @_);
108   my $ref = $sth->fetchrow_hashref();
109   $sth->finish();
110
111   return $ref;
112 }
113
114 sub selectfirst_array_query {
115   my ($form, $dbh, $query) = splice(@_, 0, 3);
116
117   my $sth = prepare_execute_query($form, $dbh, $query, @_);
118   my @ret = $sth->fetchrow_array();
119   $sth->finish();
120
121   return @ret;
122 }
123
124 1;