Hi,

Connect_cached has a hidden side-effect (documented in code, but not in
doc) :

   # XXX modifies callers data!

This is annoying when the caller uses Readonly : then connect_cached
throws an exception. So I propose the simple patch below.

Best regards, L. Dami

--- DBI.pm      Tue Apr 25 10:59:55 2006
+++ DBI_connect_cached_ok.pm    Tue Apr 25 11:07:00 2006
@@ -524,11 +524,12 @@
     # For library code using connect_cached() with mod_perl
     # we redirect those calls to Apache::DBI::connect() as well
     my ($class, $dsn, $user, $pass, $attr) = @_;
-    # XXX modifies callers data!
-    ($attr ||= {})->{dbi_connect_method} =
+
+    my %clone_attr = $attr ? %$attr : (); # don't want to modify
caller's data
+    $clone_attr{dbi_connect_method} =
        ($DBI::connect_via eq "Apache::DBI::connect")
            ? 'Apache::DBI::connect' : 'connect_cached';
-    return $class->connect($dsn, $user, $pass, $attr);
+    return $class->connect($dsn, $user, $pass, \%clone_attr);
 }
 
 sub connect {



Reply via email to