Martin J. Evans wrote: > Erik Aronesty wrote: >> Does clone just return the current handle? > > Does not seem so. > >> Many handles are multi-process safe and can be reused in that way. >> Possibly that's the default. > > Not in DBD::Oracle and Oracle Client library unfortunately. > > I think I've nearly sussed it now. I've implemented clone in > DBIx::Log4perl by simply copying the private_DBIx__Log4perl hash ref > from the old connection handle to the new one returned by clone and only > have a few issues (internal to DBIx::Log4perl) with closures used in > other packages. > > Still interested in other input from anyone else who has done this > (knows about this). > > Martin
It appears I was wrong - I have not sussed this at all. The private_DBIx_Log4perl key inserted into the original dbh appears to have some magic that means when it is copied to a new dbh returned from clone and then changed it is affecting the original dbh. Has anyone handled clone properly in a DBIx module? What did you do? Martin -- Martin J. Evans Easysoft Limited http://www.easysoft.com >> On Tue, Jan 19, 2010 at 4:31 PM, Martin J. Evans >> <martin.ev...@easysoft.com> wrote: >>> Erik Aronesty wrote: >>>> On Tue, Jan 19, 2010 at 4:04 PM, Martin J. Evans >>>> <martin.ev...@easysoft.com> wrote: >>>>> Hi, >>>>> >>>>> Is there anything special a subclassed DBI module (DBIx::Log4perl in >>>>> this case) needs to do for the clone method? >>>>> >>>>> The DBI docs currently say "The clone method duplicates the $dbh >>>>> connection by connecting with the same parameters ($dsn, $user, >>>>> $password) as originally used." but I don't see any call to connect when >>>>> clone is called. >>>> Presumably the "clone" method gives the driver an opportunity to >>>> duplicate an already-connected connection in a more efficient way than >>>> simply reconnecting from "scratch". >>>> >>>> >>> It would appear so. I've added a "mock" clone method to DBIx::Log4perl >>> and obviously it is called but I never see a second call to connect so >>> either I am misunderstanding things here and/or the docs are a >>> simplification. >>> >>> Martin >>> >> > > >