/usr/local/CPAN/Mvalve/Mvalve/CLI/Mvalve/Create.pm


package Mvalve::CLI::Mvalve::Create;
use Moose;
use DBI;

extends 'MooseX::App::Cmd::Command';
with 'Mvalve::CLI::ConfigFromFile';

has 'connect_info' => (
    is => 'rw',
    isa => 'ArrayRef',
    required => 1,
    auto_deref => 1,
);

__PACKAGE__->meta->make_immutable;

no Moose;

sub run {
    my $self = shift;

    my $dbh = DBI->connect( $self->connect_info );

    local $dbh->{AutoCommit} = 0;
    local $dbh->{RaiseError} = 1;

    eval {
        $dbh->do(<<"        EOSQL");
            CREATE TABLE q_incoming (
                destination VARCHAR(40) NOT NULL,
                message     BLOB NOT NULL
            ) ENGINE=QUEUE DEFAULT CHARSET=utf8;
        EOSQL

        $dbh->do(<<"        EOSQL");
            CREATE TABLE q_emerg (
                destination VARCHAR(40) NOT NULL,
                message     BLOB NOT NULL
            ) ENGINE=QUEUE DEFAULT CHARSET=utf8;
        EOSQL

        $dbh->do(<<"        EOSQL");
            CREATE TABLE q_timed (
                destination VARCHAR(40) NOT NULL,
                ready       BIGINT NOT NULL,
                message     BLOB NOT NULL
            ) ENGINE=QUEUE DEFAULT CHARSET=utf8;
        EOSQL

        $dbh->do(<<"        EOSQL");
            CREATE TABLE q_statslog (
                action      VARCHAR(40) NOT NULL,
                destination VARCHAR(40) NOT NULL,
                logged_on   TIMESTAMP NOT NULL
            ) ENGINE=QUEUE DEFAULT CHARSET=utf8;
        EOSQL

        $dbh->commit();
    };
    if ($@) {
        print STDERR "Failed to create tables: $@\n";
    }
    $dbh->disconnect;
}