Hi list,

I use a package to return a cached connection for a mod_perl application 
connected to a Postgresql db, like so :

my $dbh_data = Aspro::db_handle::get_dbh_data($preferred_datestyle) ;

where $preferred_datestyle is either 'iso' or 'SQL, dmy', and is used for 
setting date formats in the user's session.

I then do :

$dbh_data->do( 'SET datestyle TO ?', undef, ( $preferred_datestyle ) ) ;

to set the datestyle.

Following the documentation, I would like to use instead a callback to set the 
date format at dbh creation time as you can see in my package's code below, but 
can't get it right.

Using the "connect_cached.new" key for the callback returns an error :

Can't call method "do" on an undefined value at /home/lib/Aspro/db_handle.pm

Using the "connected" key works, but creates a new db handle for each 
connection, as shown by Data::Dumper in CachedKids (apologies for the strangely 
encoded characters)

'cachedkids' => '$VAR1 = {
          
\'dbname=aspro!www-data!!AutoCommit=\\\'1\\\',Callbacks=\\\'HASH(0x7ff34f642d80)\\\',PrintError=\\\'1\\\',RaiseError=\\\'1\\\',Username=\\\'www-data\\\',dbi_connect_method=\\\'connect_cached\\\',pg_bool_tf=\\\'t\\\',private_preferred_datestyle=\\\'iso\\\'\'
 => bless( {}, \'DBI::db\' ),
          
\'dbname=aspro!www-data!!AutoCommit=\\\'1\\\',Callbacks=\\\'HASH(0x7ff34f645990)\\\',PrintError=\\\'1\\\',RaiseError=\\\'1\\\',Username=\\\'www-data\\\',dbi_connect_method=\\\'connect_cached\\\',pg_bool_tf=\\\'t\\\',private_preferred_datestyle=\\\'SQL,
 dmy\\\'\' => bless( {}, \'DBI::db\' ),
          
\'dbname=aspro!www-data!!AutoCommit=\\\'1\\\',Callbacks=\\\'HASH(0x7ff34f6449b8)\\\',PrintError=\\\'1\\\',RaiseError=\\\'1\\\',Username=\\\'www-data\\\',dbi_connect_method=\\\'connect_cached\\\',pg_bool_tf=\\\'t\\\',private_preferred_datestyle=\\\'SQL,
 dmy\\\'\' => bless( {}, \'DBI::db\' ),
          
\'dbname=aspro!www-data!!AutoCommit=\\\'1\\\',Callbacks=\\\'HASH(0x7ff34f641208)\\\',PrintError=\\\'1\\\',RaiseError=\\\'1\\\',Username=\\\'www-data\\\',dbi_connect_method=\\\'connect_cached\\\',pg_bool_tf=\\\'t\\\',private_preferred_datestyle=\\\'SQL,
 dmy\\\'\' => bless( {}, \'DBI::db\' ),
          
\'dbname=aspro!www-data!!AutoCommit=\\\'1\\\',Callbacks=\\\'HASH(0x7ff34fb80aa0)\\\',PrintError=\\\'1\\\',RaiseError=\\\'1\\\',Username=\\\'www-data\\\',dbi_connect_method=\\\'connect_cached\\\',pg_bool_tf=\\\'t\\\',private_preferred_datestyle=\\\'SQL,
 dmy\\\'\' => bless( {}, \'DBI::db\' ),
          
\'dbname=aspro!www-data!!AutoCommit=\\\'1\\\',Callbacks=\\\'HASH(0x7ff34f63fcf0)\\\',PrintError=\\\'1\\\',RaiseError=\\\'1\\\',Username=\\\'www-data\\\',dbi_connect_method=\\\'connect_cached\\\',pg_bool_tf=\\\'t\\\',private_preferred_datestyle=\\\'SQL,
 dmy\\\'\' => bless( {}, \'DBI::db\' ),
          
\'dbname=aspro!www-data!!AutoCommit=\\\'1\\\',Callbacks=\\\'HASH(0x7ff34f643980)\\\',PrintError=\\\'1\\\',RaiseError=\\\'1\\\',Username=\\\'www-data\\\',dbi_connect_method=\\\'connect_cached\\\',pg_bool_tf=\\\'t\\\',private_preferred_datestyle=\\\'SQL,
 dmy\\\'\' => bless( {}, \'DBI::db\' ),
          
\'dbname=sessions!www-data!!AutoCommit=\\\'1\\\',PrintError=\\\'1\\\',RaiseError=\\\'1\\\',Username=\\\'www-data\\\',dbi_connect_method=\\\'connect_cached\\\'\'
 => bless( {}, \'DBI::db\' ),
          
\'dbname=aspro!www-data!!AutoCommit=\\\'1\\\',Callbacks=\\\'HASH(0x7ff34f643b18)\\\',PrintError=\\\'1\\\',RaiseError=\\\'1\\\',Username=\\\'www-data\\\',dbi_connect_method=\\\'connect_cached\\\',pg_bool_tf=\\\'t\\\',private_preferred_datestyle=\\\'iso\\\'\'
 => bless( {}, \'DBI::db\' ),
          
\'dbname=aspro!www-data!!AutoCommit=\\\'1\\\',Callbacks=\\\'HASH(0x7ff350e68e58)\\\',PrintError=\\\'1\\\',RaiseError=\\\'1\\\',Username=\\\'www-data\\\',dbi_connect_method=\\\'connect_cached\\\',pg_bool_tf=\\\'t\\\',private_preferred_datestyle=\\\'SQL,
 dmy\\\'\' => bless( {}, \'DBI::db\' ),
          
\'dbname=aspro!www-data!!AutoCommit=\\\'1\\\',Callbacks=\\\'HASH(0x7ff350e447b8)\\\',PrintError=\\\'1\\\',RaiseError=\\\'1\\\',Username=\\\'www-data\\\',dbi_connect_method=\\\'connect_cached\\\',pg_bool_tf=\\\'t\\\',private_preferred_datestyle=\\\'SQL,
 dmy\\\'\' => bless( {}, \'DBI::db\' ),
          
\'dbname=aspro!www-data!!AutoCommit=\\\'1\\\',Callbacks=\\\'HASH(0x7ff350de4990)\\\',PrintError=\\\'1\\\',RaiseError=\\\'1\\\',Username=\\\'www-data\\\',dbi_connect_method=\\\'connect_cached\\\',pg_bool_tf=\\\'t\\\',private_preferred_datestyle=\\\'SQL,
 dmy\\\'\' => bless( {}, \'DBI::db\' ),
          
\'dbname=aspro!www-data!!AutoCommit=\\\'1\\\',Callbacks=\\\'HASH(0x7ff350e69368)\\\',PrintError=\\\'1\\\',RaiseError=\\\'1\\\',Username=\\\'www-data\\\',dbi_connect_method=\\\'connect_cached\\\',pg_bool_tf=\\\'t\\\',private_preferred_datestyle=\\\'SQL,
 dmy\\\'\' => bless( {}, \'DBI::db\' ),
          
\'dbname=aspro!www-data!!AutoCommit=\\\'1\\\',Callbacks=\\\'HASH(0x7ff350d60a28)\\\',PrintError=\\\'1\\\',RaiseError=\\\'1\\\',Username=\\\'www-data\\\',dbi_connect_method=\\\'connect_cached\\\',pg_bool_tf=\\\'t\\\',private_preferred_datestyle=\\\'SQL,
 dmy\\\'\' => bless( {}, \'DBI::db\' ),
     

What is the correct way to do this?




package Aspro::db_handle;
use strict;
use warnings;

use DBI ();

sub get_dbh_data {

    #paramètre d'affichage des dates; les caches de connection en
tiennent compte
    my $preferred_datestyle = shift || 'iso';

    my $dbh = DBI->connect_cached( "DBI:Pg:dbname=aspro", 'www-data',
undef, {
        PrintError =>1,
        RaiseError => 1,
        AutoCommit => 1,
        pg_bool_tf => 't',
        private_preferred_datestyle => $preferred_datestyle,

Callbacks => {
                 "connect_cached.new" => sub {
                     shift->do(qq{
                        SET datestyle TO $preferred_datestyle
                     });
                     return;
                 }
                 }
        
                                   } ) 
        or croak "Cannot connect to db: $DBI::errstr";
    
    return $dbh;

 }


1;



-- 
Salutations, Vincent Veyron 
http://marica.fr/ 
Gestion des contrats, des contentieux juridiques et des sinistres
d'assurance

Reply via email to