Tim Bunce wrote:

> The RaiseError/PrintError/HandleError mechanism only applies at the
> point where the DBI is abount to return control to the application.
> It isn't triggered by a "nested" calls (where select*_* calls prepare())
>
> I was planning to implement HandleWarn the same way but
> I've realised that "undef error before most method calls" mechanism
> would often clear the warning state before higher level method returns.
> Consider:
>
>     sub do {
>         my($dbh, $statement, $attr, @params) = @_;
>         my $sth = $dbh->prepare($statement, $attr) or return undef;
>         $sth->execute(@params) or return undef;
>         my $rows = $sth->rows;
>         ($rows == 0) ? "0E0" : $rows;
>     }
>
> a warning from prepare would be lost by calling execute.

That's not only a problem for higher level methods, e.g.:

    sub execute {
      ...
      $sth->set_err( 0, ... ) if ...;
      ...
      $sth->set_err( 0, ... ) if ...;
    }

All but the last warning would be lost. It would be nice if these
warnings accumulate in an array (DBI version 2?).
BTW: Even an ADO method may return more than on error/warning (in
an Errors collection). Thus I have always the problem to flatten
this collection into scalars.


Steffen

Reply via email to