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