Hi All,

I'd like to submit a simple patch that causes the DBI connect() method 
to execute a HandleError code reference if it has one. There's a 
comment suggesting that it could be added, and it makes sense to me, so 
I submit this patch.

--- DBI.pm.org  Wed Aug 21 21:09:27 2002
+++ DBI.pm      Wed Aug 21 21:24:28 2002
@@ -503,7 +503,8 @@
      unless ($dbh = $drh->$connect_meth($dsn, $user, $pass, $attr)) {
         my $msg = "$class->connect($dsn) failed: ".$drh->errstr;
         if (%attr) {
-           # XXX add $attr{HandleError} logic here?
+           # XXX add $attr{HandleError} logic here? Yes!
+            $attr->{HandleError}($msg, $drh, $dbh) if 
$attr->{HandleError};
             Carp::croak($msg) if $attr->{RaiseError};
             Carp::carp ($msg) if $attr->{PrintError};
         }

Yep, that's it!

Actually, there are a couple of other places in connect() where DBI 
croaks() that don't take advantage of the HandleError attribute, but it 
seems to me that it makes sense for it to. I'm thinking here of the 
Usage error and the attempt to connect without specifying a database 
driver. I understand that DBI has to croak at these points, but it also 
seems to me that it could equally try executing a HandleError attribute 
first. My thought is that, in those circumstances, DBI will pass in the 
class name as the second argument, since there isn't yet a handle 
object. I've attached a patch that implements that behavior, as well as 
the behavior defined above. Thoughts?

Thanks,

David

-- 
David Wheeler                                     AIM: dwTheory
[EMAIL PROTECTED]                                 ICQ: 15726394
http://david.wheeler.net/                      Yahoo!: dew7e
                                                Jabber: [EMAIL PROTECTED]

Attachment: DBI.patch
Description: Binary data

Reply via email to