App-DoubleUp
view release on metacpan or search on metacpan
lib/App/DoubleUp.pm view on Meta::CPAN
$self->{files} = \@args;
return;
}
sub process_files {
my ($self, $files) = @_;
my @querys;
local $/ = ";\n";
for my $filename (@$files) {
push @querys, $self->split_sql_file($filename);
}
return @querys;
}
sub split_sql_file {
my ($self, $filename) = @_;
my $splitter = SQL::SplitStatement->new();
return $splitter->split(scalar read_file($filename));
}
sub db_prepare {
my ($db, $query) = @_;
my $stmt = $db->prepare($query);
return $stmt;
}
sub db_flatarray {
my ($db, $query, @args) = @_;
my $stmt = db_prepare($db, $query);
$stmt->execute(@args);
my @vals;
while (my $row = $stmt->fetchrow_arrayref) {
push @vals, $row->[0];
}
return @vals;
}
sub list_of_schemata {
my ($self) = @_;
my $source = $self->source;
if ($source->{type} eq 'config') {
return @{ $source->{databases} };
}
elsif ($source->{type} eq 'database') {
my $db = $self->connect_to_db('dbi:mysql:information_schema', $self->credentials);
return db_flatarray($db, $source->{schemata_sql});
}
}
sub credentials {
my $self = shift;
return @{$self->{config}{credentials}};
}
sub connect_to_db {
my ($self, $dsn, $user, $password) = @_;
return DBI->connect($dsn, $user, $password, { RaiseError => 1, PrintError => 0 }) || croak "Error while connecting to '$dsn'";
}
sub process_querys_for_one_db {
my ($self, $db, $querys) = @_;
for my $q (@$querys) {
if ($self->process_one_query($db, $q)) {
print '.';
}
else {
print '!';
}
}
return;
}
sub process_one_query {
my ($self, $db, $q) = @_;
eval {
$db->do($q);
};
if ($@) {
return;
}
return 1;
}
sub command {
my $self = shift;
return $self->{command};
}
sub database_names {
my $self = shift;
$self->{db} //= [ $self->list_of_schemata ];
return $self->{db};
}
sub files {
my $self = shift;
return $self->{files};
}
sub run {
my ($self) = @_;
STDOUT->autoflush(1);
given ($self->command) {
when ('version') {
say "doubleup version $VERSION";
}
when ('listdb') {
my @db = $self->list_of_schemata();
for (@db) {
say;
}
}
when ('import') {
( run in 0.619 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )