X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Fsbin%2Frt-setup-database.in;h=49feba84582851c429e16db29f21fda3cd9843db;hb=8f5c91d6c7a8dc85a8b6768a149b4c7b3e144c38;hp=e83aa262b586db8d99a87935cafb6df80d1d7cc9;hpb=d39d52aac8f38ea9115628039f0df5aa3ac826de;p=freeside.git diff --git a/rt/sbin/rt-setup-database.in b/rt/sbin/rt-setup-database.in index e83aa262b..49feba845 100644 --- a/rt/sbin/rt-setup-database.in +++ b/rt/sbin/rt-setup-database.in @@ -1,9 +1,9 @@ #!@PERL@ -w -# {{{ BEGIN BPS TAGGED BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -43,7 +43,7 @@ # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # -# }}} END BPS TAGGED BLOCK +# END BPS TAGGED BLOCK }}} use strict; use vars qw($PROMPT $VERSION $Handle $Nobody $SystemUser $item); use vars @@ -151,6 +151,9 @@ elsif ( $args{'action'} eq 'drop' ) { } drop_db(); } +elsif ( $args{'action'} eq 'insert_initial' ) { + insert_initial_data(); +} elsif ( $args{'action'} eq 'insert' ) { insert_data( $args{'datafile'} || ($args{'datadir'}."/content")); } @@ -196,6 +199,7 @@ sub insert_schema { local $SIG{__WARN__} = sub {}; my $is_local = 0; # local/etc/schema needs to be nonfatal. + $dbh->begin_work or die $dbh->errstr; foreach my $statement (@schema) { if ($statement =~ /^\s*;$/) { $is_local = 1; next; } print STDERR "SQL: $statement\n" if defined $args{'debug'}; @@ -204,12 +208,13 @@ sub insert_schema { die "Problem with statement:\n $statement\n" . $sth->errstr; } } + $dbh->commit or die $dbh->errstr; } else { die "Couldn't find schema file for " . $RT::DatabaseType . "\n"; } - print "schema sucessfully inserted\n"; + print "Done setting up database schema.\n"; } @@ -217,7 +222,6 @@ sub insert_schema { # {{{ sub drop_db sub drop_db { - return if ( $RT::DatabaseType eq 'SQLite' ); if ( $RT::DatabaseType eq 'Oracle' ) { print <do("Drop DATABASE $RT::DatabaseName") or warn $DBI::errstr; } @@ -273,20 +281,19 @@ sub create_db { # }}} sub get_dba_password { - print -"In order to create a new database and grant RT access to that database,\n"; + print "In order to create or update your RT database,"; print "this script needs to connect to your " . $RT::DatabaseType . " instance on " . $RT::DatabaseHost . " as " . $args{'dba'} . ".\n"; - print -"Please specify that user's database password below. If the user has no database\n"; + print "Please specify that user's database password below. If the user has no database\n"; print "password, just press return.\n\n"; print "Password: "; ReadMode('noecho'); my $password = ReadLine(0); ReadMode('normal'); + print "\n"; return ($password); } @@ -313,15 +320,15 @@ sub insert_acl { } elsif ( $RT::DatabaseType =~ /^mysql$/i ) { do $base_path . "/acl.mysql" - || die "Couldn't find ACLS for mysql in " . $RT::EtcPath . "\n" . $@; + || die "Couldn't find ACLS for mysql in $base_path\n" . $@; } elsif ( $RT::DatabaseType =~ /^Sybase$/i ) { do $base_path . "/acl.Sybase" - || die "Couldn't find ACLS for Sybase in " . $RT::EtcPath . "\n" . $@; + || die "Couldn't find ACLS for Sybase in $base_path\n" . $@; } elsif ( $RT::DatabaseType =~ /^informix$/i ) { do $base_path . "/acl.Informix" - || die "Couldn't find ACLS for Informix in " . $RT::EtcPath . "\n" . $@; + || die "Couldn't find ACLS for Informix in $base_path\n" . $@; } elsif ( $RT::DatabaseType =~ /^SQLite$/i ) { return; @@ -338,6 +345,7 @@ sub insert_acl { die "Problem with statement:\n $statement\n" . $sth->errstr; } } + print "Done setting up database ACLs.\n"; } # }}} @@ -402,7 +410,8 @@ sub insert_initial_data { RealName => 'The RT System itself', Comments => 'Do not delete or modify this user. It is integral to RT\'s internal database structures', - Creator => '1' ); + Creator => '1', + LastUpdatedBy => '1' ); unless ($val) { print "$msg\n"; @@ -436,6 +445,7 @@ sub insert_data { ObjectType => 'RT::System', ObjectId => '1' ); + print "done.\n"; } # Slurp in stuff to insert from the datafile. Possible things to go in here:- @@ -609,7 +619,7 @@ sub insert_data { print "done.\n"; } $RT::Handle->Disconnect() unless ($RT::DatabaseType eq 'SQLite'); - + print "Done setting up database content.\n"; } =head2 ACLEquivGroupId @@ -636,6 +646,8 @@ $0: Set up RT's database --action init Initialize the database drop Drop the database. This will ERASE ALL YOUR DATA + insert_initial + Insert RT's core system objects insert Insert data into RT's database. By default, will use RT's installation data. To use a local or supplementary datafile, specify it