Author: timbo
Date: Mon Mar 10 15:01:04 2008
New Revision: 10905
Modified:
dbi/trunk/Changes
dbi/trunk/lib/DBD/Gofer/Transport/stream.pm
Log:
Changed gofer stream transport to improve error reporting.
Modified: dbi/trunk/Changes
==============================================================================
--- dbi/trunk/Changes (original)
+++ dbi/trunk/Changes Mon Mar 10 15:01:04 2008
@@ -46,6 +46,11 @@
to not error when fetching after all rows already fetched.
(Was fixed for compiled drivers back in DBI 1.31.)
Thanks to Mark Overmeer.
+ Fixed C sprintf formats and casts, fixing compiler warnings.
+
+ Changed gofer stream transport to improve error reporting.
+
+ Added options to t/85gofer.t so it's more useful for manual testing.
=head2 Changes in DBI 1.602 (svn rev 10706) 8th February 2008
Modified: dbi/trunk/lib/DBD/Gofer/Transport/stream.pm
==============================================================================
--- dbi/trunk/lib/DBD/Gofer/Transport/stream.pm (original)
+++ dbi/trunk/lib/DBD/Gofer/Transport/stream.pm Mon Mar 10 15:01:04 2008
@@ -154,12 +154,12 @@
$self->read_response_from_fh( {
$efh => {
error => sub { warn "error reading response stderr: $!";
$errno||=$!; 1 },
- eof => sub { warn "eof on stderr" if 0; 1 },
+ eof => sub { warn "eof reading efh" if $trace >= 4; 1 },
read => sub { $stderr_msg .= $_; 0 },
},
$rfh => {
error => sub { warn "error reading response: $!"; $errno||=$!; 1 },
- eof => sub { warn "eof on stdout" if 0; 1 },
+ eof => sub { warn "eof reading rfh" if $trace >= 4; 1 },
read => sub { $encoded_response .= $_;
($encoded_response=~s/\015\012$//) ? 1 : 0 },
},
});
@@ -168,17 +168,16 @@
# probably exited, possibly with an error to stderr.
# Turn this situation into a reasonably useful DBI error.
if (not $encoded_response) {
- my $msg = "No response received";
- if (chomp $stderr_msg && $stderr_msg) {
- $msg .= sprintf ", error reported by \"%s\" (pid %d%s): %s",
+ my @msg;
+ push @msg, "error while reading response: $errno" if $errno;
+ if ($stderr_msg) {
+ chomp $stderr_msg;
+ push @msg, sprintf "error reported by \"%s\" (pid %d%s): %s",
$self->cmd_as_string,
$pid, ((kill 0, $pid) ? "" : ", exited"),
$stderr_msg;
}
- else {
- $msg .= ($errno) ? ", error while reading response: $errno" : "(no
error message)";
- }
- die "$msg\n";
+ die join(", ", "No response received", @msg)."\n";
}
$self->trace_msg("Response received: $encoded_response\n",0)