App-Sqitch
view release on metacpan or search on metacpan
lib/App/Sqitch/Engine/vertica.pm view on Meta::CPAN
package App::Sqitch::Engine::vertica;
use 5.010;
use Moo;
use utf8;
use Path::Class;
use DBI;
use Try::Tiny;
use App::Sqitch::X qw(hurl);
use Locale::TextDomain qw(App-Sqitch);
use App::Sqitch::Types qw(DBH ArrayRef);
extends 'App::Sqitch::Engine';
our $VERSION = 'v1.6.1'; # VERSION
sub key { 'vertica' }
sub name { 'Vertica' }
sub driver { 'DBD::ODBC 1.59' }
sub default_client { 'vsql' }
sub destination {
my $self = shift;
# Just use the target name if it doesn't look like a URI or if the URI
# includes the database name.
return $self->target->name if $self->target->name !~ /:/
|| $self->target->uri->dbname;
# Use the URI sans password, and with the database name added.
my $uri = $self->target->uri->clone;
$uri->password(undef) if $uri->password;
$uri->dbname( $ENV{VSQL_DATABASE} || $self->username );
return $uri->as_string;
}
sub _def_user { $ENV{VSQL_USER} || shift->sqitch->sysuser }
sub _def_pass { $ENV{VSQL_PASSWORD} }
has _vsql => (
is => 'ro',
isa => ArrayRef,
lazy => 1,
default => sub {
my $self = shift;
my $uri = $self->uri;
my @ret = ( $self->client );
# Use _port instead of port so it's empty if no port is in the URI.
# https://github.com/sqitchers/sqitch/issues/675
for my $spec (
[ username => $self->username ],
[ dbname => $uri->dbname ],
[ host => $uri->host ],
[ port => $uri->_port ],
) {
push @ret, "--$spec->[0]" => $spec->[1] if $spec->[1];
}
if (my %vars = $self->variables) {
push @ret => map {; '--set', "$_=$vars{$_}" } sort keys %vars;
}
push @ret => $self->_client_opts;
return \@ret;
},
);
( run in 1.145 second using v1.01-cache-2.11-cpan-fe3c2283af0 )