Sorry, guys.
How I can unsubscribe from this letters?

On 4 Feb 2005 at 10:38, David Wheeler wrote:

> On Feb 4, 2005, at 2:08 AM, Tim Bunce wrote:
> 
> > One way I'd had in the back of my mind way to use the DBI dispatcher
> > to fire the callbacks.
> >
> >    $h->{Callbacks}->{$method_name} = \&foo; # called on entry
> >    $h->{Callbacks}->{$method_name} = [ \&foo, \&bar ]; # foo on entry, 
> > bar on exit
> >    $h->{Callbacks}->{$method_name} = [ [EMAIL PROTECTED], \&bar ]; # each 
> > of 
> > @subrefs on entry, bar on exit
> >
> > that way _every_ method would get pre and post call hooks for free.
> > If a handle has no callbacks the cost would be unmeasurable (just
> > a bit flag test in the dispatcher).  If a handle has any callbacks
> > then the added cost for calling a method that doesn't have a callback
> > would just be one hash lookup.
> 
> Ah, yes, that sounds really nice.
> 
> > How's your C coding? :)
> 
> I gave up when I got to my first malloc. Sorry, I'm JAPH. I can help 
> with the Perl code, though!
> 
> > This approach doesn't directly support callbacks that need to fire
> > _within_ a method, such as the proposed OnConnectCached firing only
> > if connect_cached() does _not_ need to call connect().
> >
> > [For that case you could have an pre-connect_cached callback that
> > temporarily installs a connect callback which sets a flag, and a
> > post-connect_cached callback that resets %$attr if the flag's not set.
> > But that's getting quite baroque!]
> 
> Yah, my NoReset solution is starting to look better. Maybe the 
> get_child() stuff should take priority?
> 
> > Alternatively connect_cached() could call a new method in that
> > situation and the hooks could be applied to that. But that's
> > relatively expensive and it would be 'odd' for that method to be
> > called with the $attr that was passed to connect_cached().
> >
> > Alternatively some pseudo-method-names could be supported in the
> > $h->{Callbacks} hash (ie "connect_cached.reused") and the relevant
> > methods could check for and call them directly. Then the extra code
> > in connect_cached would something like this:
> >
> >   if (my $cb = $dbh->{Callbacks}) {
> >       my $oc = $cb->{"connect_cached.reused"};
> >       $oc->($dbh, $dsn, $user, $pass, $attr) if ref $oc eq 'CODE';
> >   }
> >
> > Umm, food for thought...
> 
> That's starting to get might complex, isn't it?
> 
> Regards,
> 
> David
> 


Reply via email to