#!/usr/bin/perl -w # # script to update the db # # $Id: moby-s-update-db.pl,v 1.2 2009/04/03 16:50:50 kawas Exp $ # Contact: Edward Kawas # ----------------------------------------------------------- use strict; use DBI; use DBD::mysql; BEGIN { use Getopt::Std; use vars qw/ $opt_h $opt_c /; getopts('hc'); use constant MSWIN => $^O =~ /MSWin32|Windows_NT/i ? 1 : 0; # usage if ($opt_h or not $opt_c) { print STDOUT <<'END_OF_USAGE'; Script to help update your BioMOBY registry database. Usage: moby-s-update-db.pl [-h] -c -c ..... update the db to include cgi-async as a service category. -h ..... shows this message You will need to know the username/password of a user with write access to the BioMOBY databases. Good luck! END_OF_USAGE exit(0); } } if ($opt_c) { print "\n\n\n \tThis script will update your mobycentral database such that \tthe service_instance table has a category enum field of 'cgi-async'. \tThe login you use below MUST have administration privileges \ton the mobycentral database! \n\n"; my $go = 1; # change this to '0' for a dry run... print "Central Registry Databasename [mobycentral]: "; my $dbname = ; chomp $dbname; $dbname ||= 'mobycentral'; print "\n"; print "Central Registry Database URL [localhost]: "; my $url = ; chomp $url; $url ||= 'localhost'; print "\n"; print "Central Registry Database Port [3306]: "; my $port = ; chomp $port; $port ||= 3306; print "\n"; print "Central Registry Database Username [root]: "; my $username = ; chomp $username; $username ||= 'root'; print "\n"; print "Cenral Registry Database Password [undef]: "; my $password = ; chomp $password; $password ||= undef; print "\n"; my $driver = 'DBI:mysql'; my ($dsn) = "$driver:$dbname:$url:$port"; my $dbh = DBI->connect( $dsn, $username, $password, { RaiseError => 1 } ) or die "can't connect to database"; die "can't connect to database\n" unless $dbh; # does the field already exist? my $results = $dbh->selectall_hashref( 'describe service_instance', 'Field' ); my $category = $results->{category}->{Type} if defined $results->{category} and $results->{category}->{Type}; die "Database doesn't seem to be created yet." unless $category; unless ( $category =~ m/cgi\-async/i ) { $go && $dbh->do( " alter table service_instance modify category ENUM('moby','soap','wsdl','cgi','moby-async', 'cgi-async', 'doc-literal', 'doc-literal-async') default NULL" ); } print "\nUpdate Complete!\n"; }