Alzabo
view release on metacpan or search on metacpan
lib/Alzabo/Driver/PostgreSQL.pm view on Meta::CPAN
package Alzabo::Driver::PostgreSQL;
use strict;
use vars qw($VERSION);
use Alzabo::Driver;
use DBD::Pg;
use DBI;
use Params::Validate qw( :all );
Params::Validate::validation_options( on_fail => sub { Alzabo::Exception::Params->throw( error => join '', @_ ) } );
$VERSION = 2.0;
use base qw(Alzabo::Driver);
sub new
{
my $proto = shift;
my $class = ref $proto || $proto;
return bless {}, $class;
}
sub connect
{
my $self = shift;
$self->{tran_count} = undef;
# This database handle is stale or nonexistent, so we need to (re)connect
$self->disconnect if $self->{dbh};
$self->{dbh} = $self->_make_dbh( @_,
name => $self->{schema}->db_schema_name
);
}
sub supports_referential_integrity { 1 }
sub schemas
{
my $self = shift;
my %p = validate( @_, { user => { type => SCALAR | UNDEF,
optional => 1 },
password => { type => SCALAR | UNDEF,
optional => 1 },
host => { type => SCALAR | UNDEF,
optional => 1 },
port => { type => SCALAR | UNDEF,
optional => 1 },
options => { type => SCALAR | UNDEF,
optional => 1 },
tty => { type => SCALAR | UNDEF,
optional => 1 },
} );
local %ENV;
foreach ( grep { defined $p{$_} && length $p{$_} } keys %p )
{
my $key = uc "pg$_";
$ENV{$key} = $p{$_};
}
my @schemas = ( map { if ( defined )
{
/dbi:\w+:dbname="?(\w+)"?/i;
$1 ? $1 : ();
}
else
{
();
}
}
DBI->data_sources( $self->dbi_driver_name ) );
return @schemas;
}
sub tables
{
( run in 1.428 second using v1.01-cache-2.11-cpan-39bf76dae61 )