#!/usr/bin/perl
use strict;
use warnings;
=head1 NAME
deploy - hopkins database schema creation
=head1 DESCRIPTION
the deploy script will create the database schema usd by
hopkins via SQL::Translator. the only option that need be
specified to the deploy script is what XML configuration
file to use to determine the database connection info.
=cut
use Getopt::Compact;
use Hopkins;
use Hopkins::Config::XML;
use Hopkins::Store::Schema;
sub Hopkins::log_debug { }
sub Hopkins::log_info { }
sub Hopkins::log_warn { }
sub Hopkins::log_error { }
# use Getopt::Compact to process any command-line options.
# we use Getopt::Compact instead of Getopt::Long simply for
# the nifty built-in help option that displays usage info.
my $godef =
{
name => 'deploy',
struct =>
[
[ [ 'c', 'conf' ], 'XML config file', '=s' ],
[ [ 'd', 'drop' ], 'drop existing tables', ]
]
};
my $go = new Getopt::Compact %$godef;
my $global = $go->opts;
# the configuration file is the only required argument
die $go->usage if not defined $global->{conf};
# parse the configuration, extract the database connection
# options, then create a schema object that's connected to
# the configured database
my $config = new Hopkins::Config::XML { file => $global->{conf} };
my $status = $config->load;
if (not $status->parsed) {
print "deploy: unable to load configuration from $global->{conf}\n";
print $status->errmsg . "\n";
exit 1;
}
my $href = $config->fetch('database');
my $schema = Hopkins::Store::Schema->connect(@$href{qw(dsn user pass options)});
# deploy the schema to the connected database! we're done!
$schema->deploy({ add_drop_table => $global->{drop} });
exit;
=head1 AUTHOR
Mike Eldridge <diz@cpan.org>
=head1 LICENSE
this library is free software. you may distribute it
and/or modify it under the same terms as perl itself.
=cut