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/

Reply via email to