App-DoubleUp
view release on metacpan or search on metacpan
lib/App/DoubleUp.pm view on Meta::CPAN
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') {
my @querys = $self->process_files($self->files);
for my $schema (@{ $self->database_names }) {
my $dsn = 'dbi:mysql:'.$schema;
say "DB: $schema";
my $db = $self->connect_to_db($dsn, $self->credentials);
$self->process_querys_for_one_db($db, \@querys);
say '';
}
}
when (undef) {
$self->usage;
}
default {
say "Unknown command: $_";
$self->usage;
}
}
return;
}
sub usage {
my $self = shift;
say "Usage: doubleup [command] [options]";
say "";
say "List of commands";
say "";
say " listdb list of schemata";
say " import [filename] import a file into each db";
say " import1 [db] [filename] import a file into one db";
say " version show version";
say "";
return;
}
1;
=head1 NAME
App::DoubleApp - Import SQL files into MySQL
=head1 SYNOPSIS
$ doubleup listdb
ww_test1
ww_test2
ww_test3
ww_test4
$ doubleup import1 ww_test db/01_base.sql
.
$ doubleup import db/02_upgrade.sql
....
=head1 DESCRIPTION
Import SQL files into a DBI compatible database.
=head1 AUTHOR
Peter Stuifzand E<lt>peter@stuifzand.euE<gt>
=head1 COPYRIGHT
Copyright 2013- Peter Stuifzand
=head1 LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 SEE ALSO
=cut
( run in 0.762 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )