On Aug 23, 2013, at 12:22 PM, Vincent Veyron <vv.li...@wanadoo.fr> wrote:

> As you can see, no caching happens when any callback is present in the
> connect method (connected, connect_cached.new, or
> connect_cached.reused).

Oh, you know what? I think this is why the example in the docs and my blog post 
puts the callback into a lexical variable, then just passes that lexical. This 
is because the params passed to connect_cached(), if they vary at all, create 
different connections. You call connect_cached() three times, and construct the 
Callbacks hash reference anew each time. So it is different each time.

Try this:

my $cb = {
    'connect_cached.reused' => sub { print "reused!!!"; return; },
};
for my $test (1..3) {
    my $cached_dbh = MyApp::SQLite->connect_cached(
        "dbi:SQLite:dbname=$dbfile", '', '',
        {
            RaiseError  => 1,
            PrintError  => 0,
            Callbacks => $cb,
        }
    );
    ...
}

Best,

David

Reply via email to