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 )