On Thu, May 02, 2002 at 04:56:02PM +0800, Stas Bekman wrote:
> Tim Bunce wrote:
> 
> >>>>to take this a step further, what would be really DWIMy is for DBI to clear all 
>of the 
> >>>>$dbh attributes not specified in the connect() call (including stuff like 
>LongReadLen) if 
> >>>>dbi_connect_method = 'Apache'.  that seems like the right thing, since with 
>Apache::DBI 
> >>>>wat we want a "new" $dbh, just without the connect overhead.  and DBI seems like 
>a 
> >>>>reasonable place to do it, especially since DBI->connect is kinda 
>action-at-a-distance 
> >>>>anyway wrt Apache::DBI.
> >>>>
> >>>>maybe I'm missing something design-wise, though?
> >>>
> >>>I think the Apache::DBI subclass can override the STORE method and
> >>>track attribute changes itself.
> >>
> >>That sounds like a good solution. Edmund?
> >>
> >>I raised this issue, since in the mod_perl book Eric and I are working 
> >>on, we say that the connect string shouldn't change in order to be able 
> >>to reuse connections.
> > 
> > 
> > s/connect string/connect string and username and password and attributes/ :)
> > 
> > 
> >>I guess we must warn users that any changes to 
> >>$dbh will persist, which renders the advisory useless and doesn't 
> >>provide any solution :(
> > 
> > 
> > The advisory is still valid - it just needs to be extended so say
> > that if they modify an attribute after the connect then they should
> > restore it... or wait for a version of Apache::DBI that'll do that for them :)
> 
> Thanks Tim,
> 
> Is it possible to simply localize the hash elements? Will this work 
> properly?
> 
>   {
>        my $dbh = DBI->connect(@connect) || die $DBI::errstr;
> 
>        print "LongReadLen is: ", $dbh->{LongReadLen}, "\n";
>        local $dbh->{LongReadLen} = 40;
>        print "LongReadLen is now: ", $dbh->{LongReadLen}, "\n";
>    }
> 
>    my $dbh = DBI->connect(@connect) || die $DBI::errstr;
> 
>    print "LongReadLen for new dbh is: ", $dbh->{LongReadLen}, "\n";
> 
> If localization works, that's probably the best solution, that can be 
> applied by users.

Yes, that'll work. But in some versions of perl it leaks memory
(including 5.005 and 5.006, not sure about 5.5.3 and 5.6.1 or later).

Tim.

Reply via email to