On Tue, Jul 04, 2006 at 02:18:33PM +0100, Martin J. Evans wrote:
> 
> Thanks for the explanation. You have not however convinced me this behavior is
> right. If RaiseError caused a die on error and someone wanted to ignore errors
> they could just do what they always do - turn RaiseError off and do the
> checking themselves.
> 
> What I was really after was whether not dying on an error in execute_array
> when RaiseError was enabled was by design or a an oversight.

An oversight. Though the oversight is actually in execute_for_fetch()
which execute_array() array calls to do the real work.

> It makes a
> difference to me since I read the DBI docs and saw nothing which said
> RaiseError does not work with execute_array, then discovered it didn't,
> worked around this in my DBIx extension but would like to document why I
> have this workaround.

Try this (untested):

--- DBI.pm      (revision 6604)
+++ DBI.pm      (working copy)
@@ -1931,7 +1931,10 @@
                push @$tuple_status, [ $err, $errstr_cache{$err} ||= 
$sth->errstr, $sth->state ];
            }
        }
-       return ($err_count) ? undef : scalar(@$tuple_status)||"0E0";
+        my $tuples = @$tuple_status;
+        return $sth->set_err(1, "executing $tuple_status generated $err_count 
errors")
+            if $err_count;
+       return scalar(@$tuple_status) || "0E0";
     }
 
Tim.

Reply via email to