X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDBUtils.pm;h=fd2873ebfe232a4090ff1ec0864df989dcf6c56c;hb=a4f92ff17d2572ec3a0465fe4444c741d80ecc77;hp=7145dc2e6fd1ca3e569b7c4efdf7e8b0acb9e9a0;hpb=15d5b55d84399cc17b24c7800a5faeeb02a665bf;p=kivitendo-erp.git diff --git a/SL/DBUtils.pm b/SL/DBUtils.pm index 7145dc2e6..fd2873ebf 100644 --- a/SL/DBUtils.pm +++ b/SL/DBUtils.pm @@ -4,8 +4,10 @@ require Exporter; @ISA = qw(Exporter); @EXPORT = qw(conv_i conv_date conv_dateq do_query selectrow_query do_statement - dump_query quote_db_date selectall_hashref_query selectfirst_hashref_query - prepare_execute_query); + dump_query quote_db_date + selectfirst_hashref_query selectfirst_array_query + selectall_hashref_query selectall_array_query + prepare_execute_query prepare_query); sub conv_i { my ($value, $default) = @_; @@ -27,44 +29,44 @@ sub conv_dateq { } sub do_query { + $main::lxdebug->enter_sub(2); + my ($form, $dbh, $query) = splice(@_, 0, 3); + dump_query(LXDebug::QUERY, '', $query, @_); + if (0 == scalar(@_)) { $dbh->do($query) || $form->dberror($query); } else { $dbh->do($query, undef, @_) || $form->dberror($query . " (" . join(", ", @_) . ")"); } - dump_query(LXDebug::QUERY, '', $query . " (" . join(", ", @_) . ")"); -} -sub selectrow_query { - my ($form, $dbh, $query) = splice(@_, 0, 3); - - if (0 == scalar(@_)) { - my @results = $dbh->selectrow_array($query); - $form->dberror($query) if ($dbh->err); - return @results; - } else { - my @results = $dbh->selectrow_array($query, undef, @_); - $form->dberror($query . " (" . join(", ", @_) . ")") if ($dbh->err); - return @results; - } + $main::lxdebug->leave_sub(2); } +sub selectrow_query { &selectfirst_array_query } + sub do_statement { + $main::lxdebug->enter_sub(2); + my ($form, $sth, $query) = splice(@_, 0, 3); + dump_query(LXDebug::QUERY, '', $query, @_); + if (0 == scalar(@_)) { $sth->execute() || $form->dberror($query); } else { $sth->execute(@_) || $form->dberror($query . " (" . join(", ", @_) . ")"); } + + $main::lxdebug->leave_sub(2); } sub dump_query { my ($level, $msg, $query) = splice(@_, 0, 3); + while ($query =~ /\?/) { my $value = shift(@_); $value =~ s/\'/\\\'/g; @@ -72,6 +74,8 @@ sub dump_query { $query =~ s/\?/$value/; } + $query =~ s/[\n\s]+/ /g; + $msg .= " " if ($msg); $main::lxdebug->message($level, $msg . $query); @@ -79,14 +83,35 @@ sub dump_query { sub quote_db_date { my ($str) = @_; + return "NULL" unless defined $str; return "current_date" if $str =~ /current_date/; + $str =~ s/'/''/g; return "'$str'"; } +sub prepare_query { + $main::lxdebug->enter_sub(2); + + my ($form, $dbh, $query) = splice(@_, 0, 3); + + dump_query(LXDebug::QUERY, '', $query, @_); + + my $sth = $dbh->prepare($query) || $form->dberror($query); + + $main::lxdebug->leave_sub(2); + + return $sth; +} + sub prepare_execute_query { + $main::lxdebug->enter_sub(2); + my ($form, $dbh, $query) = splice(@_, 0, 3); + + dump_query(LXDebug::QUERY, '', $query, @_); + my $sth = $dbh->prepare($query) || $form->dberror($query); if (scalar(@_) != 0) { $sth->execute(@_) || $form->dberror($query . " (" . join(", ", @_) . ")"); @@ -94,10 +119,14 @@ sub prepare_execute_query { $sth->execute() || $form->dberror($query); } + $main::lxdebug->leave_sub(2); + return $sth; } sub selectall_hashref_query { + $main::lxdebug->enter_sub(2); + my ($form, $dbh, $query) = splice(@_, 0, 3); my $sth = prepare_execute_query($form, $dbh, $query, @_); @@ -107,17 +136,146 @@ sub selectall_hashref_query { } $sth->finish(); + $main::lxdebug->leave_sub(2); + return $result; } +sub selectall_array_query { + $main::lxdebug->enter_sub(2); + + my ($form, $dbh, $query) = splice(@_, 0, 3); + + my $sth = prepare_execute_query($form, $dbh, $query, @_); + my @result; + while (my ($value) = $sth->fetchrow_array()) { + push(@result, $value); + } + $sth->finish(); + + $main::lxdebug->leave_sub(2); + + return @result; +} + sub selectfirst_hashref_query { + $main::lxdebug->enter_sub(2); + my ($form, $dbh, $query) = splice(@_, 0, 3); my $sth = prepare_execute_query($form, $dbh, $query, @_); my $ref = $sth->fetchrow_hashref(); $sth->finish(); + $main::lxdebug->leave_sub(2); + return $ref; } +sub selectfirst_array_query { + $main::lxdebug->enter_sub(2); + + my ($form, $dbh, $query) = splice(@_, 0, 3); + + my $sth = prepare_execute_query($form, $dbh, $query, @_); + my @ret = $sth->fetchrow_array(); + $sth->finish(); + + $main::lxdebug->leave_sub(2); + + return @ret; +} + 1; + + +__END__ + +=head1 NAME + +SL::DBUTils.pm: All about Databaseconections in Lx + +=head1 SYNOPSIS + + use DBUtils; + + conv_i + conv_date + conv_dateq + quote_db_date($str) + + do_query($form, $dbh, $query) + do_statement($form, $sth, $query) + + dump_query($level, $msg, $query) + prepare_execute_query($form, $dbh, $query) + + my $all_results_ref = selectall_hashref_query($form, $dbh, $query) + my $first_result_hash_ref = selectfirst_hashref_query($form, $dbh, $query); + + my @first_result = selectfirst_array_query($form, $dbh, $query); # == + my @first_result = selectrow_query($form, $dbh, $query); + + +=head1 DESCRIPTION + +=head1 FUNCTIONS + +=over 4 + +=item conv_i + +=item conv_date + +=item conv_dateq + +=item quote_db_date($str) + +=item do_query($form, $dbh, $query) + +=item do_statement($form, $sth, $query) + +=item dump_query($level, $msg, $query) + +=item prepare_execute_query($form, $dbh, $query) + +=item selectall_hashref_query($form, $dbh, $query) + +=item selectfirst_hashref_query($form, $dbh, $query); + +=item selectfirst_array_query($form, $dbh, $query); # == + +=item selectrow_query($form, $dbh, $query); + +=back + +=head1 EXAMPLE + +=head1 SEE ALSO + +=head1 MODULE AUTHORS + +Moritz Bunkus Em.bunkus@linet-services.de +Sven Schoeling Es.schoeling@linet-services.de + +=head1 DOCUMENTATION AUTHORS + +Udo Spallek Eudono@gmx.netE + +=head1 COPYRIGHT AND LICENSE + +Copyright 2007 by Lx-Office Community + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +=cut