From: Moritz Bunkus Date: Tue, 4 Jun 2013 12:32:00 +0000 (+0200) Subject: SL::DBUpgrade2::Base neue Funktion db_errstr() für korrekt encodierte Datenbankfehler... X-Git-Tag: release-3.1.0beta1~369 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=aa1a40e9141fd718e85e6e92f78adf301f53cf1f;p=kivitendo-erp.git SL::DBUpgrade2::Base neue Funktion db_errstr() für korrekt encodierte Datenbankfehlermeldungen --- diff --git a/SL/DBUpgrade2/Base.pm b/SL/DBUpgrade2/Base.pm index 2c1e11114..9978b207e 100644 --- a/SL/DBUpgrade2/Base.pm +++ b/SL/DBUpgrade2/Base.pm @@ -5,6 +5,7 @@ use strict; use parent qw(Rose::Object); use Carp; +use Encode; use English qw(-no_match_vars); use File::Basename (); use File::Copy (); @@ -37,18 +38,28 @@ sub execute_script { sub db_error { my ($self, $msg) = @_; - die $::locale->text("Database update error:") . "
$msg
" . $DBI::errstr; + die $::locale->text("Database update error:") . "
$msg
" . $self->db_errstr('DBI'); } sub db_query { my ($self, $query, %params) = @_; - return if $self->dbh->do($query, undef, @{ $params{bind} || [] }); + my $dbh = $params{dbh} || $self->dbh; + + return if $dbh->do($query, undef, @{ $params{bind} || [] }); $self->db_error($query) unless $params{may_fail}; - $self->dbh->rollback; - $self->dbh->begin_work; + $dbh->rollback; + $dbh->begin_work; +} + +sub db_errstr { + my ($self, $handle) = @_; + + my $error = $handle ? $handle->errstr : $self->dbh->errstr; + + return $::locale->is_utf8 ? Encode::decode('utf-8', $error) : $error; } sub check_coa { @@ -221,6 +232,31 @@ current transaction will be rolled back, a new one will be started. An optional array reference containing bind parameter for the query. +=item C + +The database handle to use. If undefined then C<$self-Edbh> will +be used. + +=back + +=item C + +Returns the last database from C<$handle> error message encoded in +Perl's internal encoding. The PostgreSQL DBD leaves the UTF-8 flag off +for error messages even if the C attribute is set. + +C<$handle> is optional and can be one of three things: + +=over 2 + +=item 1. A database or statement handle. In that case +C<$handle-Eerrstr> is used. + +=item 2. The string 'DBI'. In that case C<$DBI::errstr> is used. + +=item 3. If it is undefined then C<$self-Edbh-Eerrstr> is +used. + =back =item C