Darren Duncan wrote:
sub _lazy_default_for_dbc {
my ($process) = @_;
my $dbc = try {
my $dsn = sprintf( q{dbi:Pg:dbname=%s;host=%s;port=%s},
$process->db_name(), $process->db_host(),
$process->db_port() );
my $dbc = DBIx::Connector->new( $dsn,
$process->db_user(), $process->db_pass(),
{ 'RaiseError' => 1, 'AutoCommit' => 1 },
);
my $dbh = $dbc->dbh();
# SET UP ANY OTHER CLIENT SETTINGS HERE ON $dbh
return $dbc;
}
catch {
confess sprintf( q{Could not open connection to Pg server or
db: %s}, $_ );
};
return $dbc;
}
As an addendum ...
While this isn't relevant to the main point of my post, which is how to separate
config params for a database connection used by a Catalyst app, I noticed that
my code had a different flaw, which is now hopefully corrected in the version below:
sub _lazy_default_for_dbc {
my ($process) = @_;
my $dbc = try {
my $dsn = sprintf( q{dbi:Pg:dbname=%s;host=%s;port=%s},
$process->db_name(), $process->db_host(), $process->db_port() );
my $dbc = DBIx::Connector->new( $dsn,
$process->db_user(), $process->db_pass(), {
RaiseError => 1,
AutoCommit => 1,
Callbacks => {
connected => sub {
my ($dbh) = @_;
$process->_do_post_connect( $dbh );
},
},
},
);
return $dbc;
}
catch {
confess sprintf( q{Could not open connection to Pg server or db:
%s}, $_ );
};
return $dbc;
}
sub _do_post_connect {
my ($process, $dbh) = @_;
# SET UP ANY OTHER CLIENT SETTINGS HERE ON $dbh
}
The flaw is that if DBIx::Connector had to reconnect to the database, an event
that users shouldn't have to be aware of having occurred, the client settings
done by "SET UP ..." would not have been done on the new connection.
-- Darren Duncan
_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/