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 )