X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=bin%2Fdebbugs-installsql;fp=bin%2Fdebbugs-installsql;h=8d8437ace3c219da8200a410b6618dd7fdd59991;hb=53c435119200ab9b1c2538a96b8374c51a078855;hp=0000000000000000000000000000000000000000;hpb=0e8f07fda6e40b5967d9c6b28b3200db22766343;p=debbugs.git diff --git a/bin/debbugs-installsql b/bin/debbugs-installsql new file mode 100755 index 0000000..8d8437a --- /dev/null +++ b/bin/debbugs-installsql @@ -0,0 +1,170 @@ +#!/usr/bin/perl +# debbugs-installsql installs the SQL database using DBIx::Class::DeploymentHandler +# and is released under the terms of the GNU GPL version 3, or any +# later version, at your option. See the file README and COPYING for +# more information. +# Copyright 2013-2014 by Don Armstrong . + + +use warnings; +use strict; + +use Getopt::Long; +use Pod::Usage; + +=head1 NAME + +debbugs-installsql - installs the SQL database using DBIx::Class::DeploymentHandler + +=head1 SYNOPSIS + +debbugs-installsql [ --upgrade | --install ] + + Options: + --service postgresql service to connect to + --sysconfdir postgresql system configuration directory + --deployment-dir SQL deployment directory + --debug, -d debugging level (Default 0) + --help, -h display this help + --man, -m display manual + +=head1 OPTIONS + +=over + +=item B<--service> + +Postgresl service to connect to (defaults to debbugs) + +=item B<--sysconfdir> + +Postgresql sysconf dir. May also be set using the PGSYSCONFDIR +environmental variable (which this option overrides). + +=item B<--deployment-dir> + +Deployment directory (defaults to /usr/share/debbugs/sqldeployment) + +=item B<--debug, -d> + +Debug verbosity. (Default 0) + +=item B<--help, -h> + +Display brief usage information. + +=item B<--man, -m> + +Display this manual. + +=back + +=head1 EXAMPLES + +debbugs-installsql + +=cut + + +use vars qw($DEBUG); + +use Debbugs::DB; +use Debbugs::DB::Util qw(prepare_execute); +use aliased 'DBIx::Class::DeploymentHandler' => 'DH'; + +my %options = (debug => 0, + help => 0, + man => 0, + overwrite_deployment => 0, + service => 'debbugs', + deployment_dir => '/usr/share/debbugs/sqldeployment', + ); + +GetOptions(\%options, + 'service|s=s', + 'dsn=s', + 'sysconfdir|c=s', + 'install', + 'install_version_storage|install-version-storage', + 'upgrade', + 'current_version|current-version', + 'overwrite_deployment|overwrite-deployment|force_overwrite|force-overwrite', + 'deployment_dir|deployment-dir=s', + 'debug|d+','help|h|?','man|m'); + +pod2usage() if $options{help}; +pod2usage({verbose=>2}) if $options{man}; + +$DEBUG = $options{debug}; + +my @USAGE_ERRORS; + +my @exclusive_options = qw(install upgrade current_version install_version_storage); +if (1 < grep {exists $options{$_}} @exclusive_options) { + push @USAGE_ERRORS,"You must only give one of the ". + join(', ',map {s/_/-/g; "--".$_} @exclusive_options). + " options"; +} +if (not grep {exists $options{$_}} @exclusive_options) { + $options{current_version} = 1; +} + +pod2usage(join("\n",@USAGE_ERRORS)) if @USAGE_ERRORS; + +if (exists $options{sysconfdir}) { + if (not defined $options{sysconfdir} or not length $options{sysconfdir}) { + delete $ENV{PGSYSCONFDIR}; + } else { + $ENV{PGSYSCONFDIR} = $options{sysconfdir}; + } +} + +if (not exists $options{dsn} or + not defined $options{dsn} or + not length $options{dsn}) { + $options{dsn} = 'dbi:Pg:service='.$options{service}; +} + + +my $schema = Debbugs::DB->connect($options{dsn}) or + die "Unable to connect to database"; + + +my $dh = DH->new({schema => $schema, + force_overwrite => $options{overwrite_deployment}, + script_directory => $options{deployment_dir}, + databases => 'PostgreSQL', + sql_translator_args => {producer_args=> {postgres_version => 9}}, + }); + +if ($options{current_version}) { + print "The current database version is: ".$dh->database_version."\n"; + exit 0; +} elsif ($options{install}) { + $dh->prepare_install; + $dh->install; + ## this is lame, but because the current release of DeploymentHandler does + ## not support WHERE or quoted indexes properly (fixed in git), we create + ## these indexes manually here. + $schema->storage-> + dbh_do(sub{my ($s,$dbh) = @_; + prepare_execute($dbh,<prepare_deploy; + $dh->prepare_upgrade; + $dh->upgrade; +} elsif ($options{install_version_storage}) { + $dh->prepare_version_storage_install; + $dh->install_version_storage; +} + + +__END__