2 # $Header: /home/cvs/cvsroot/freeside/rt/tools/Attic/initdb,v 1.1 2002-08-12 06:17:08 ivan Exp $
5 use vars qw($PROMPT $SCHEMA_FILE $SCHEMA_DIR
6 $ACTION $DEBUG $DB_TYPE $DB_HOME
7 $DB_HOST $DB_PORT $DB_DBA $DB_DATABASE $DB_DBA_PASSWORD);
10 use DBIx::DataSource qw( create_database drop_database );
13 $|=1; #unbuffer that output.
16 $PROMPT = 1; #by default, should at least *ask* before nuking databases
18 $SCHEMA_FILE = "$SCHEMA_DIR/schema.pm"; #hmm
20 ($DB_TYPE, $DB_HOME, $DB_HOST, $DB_PORT, $DB_DBA, $DB_DATABASE, $ACTION) = @ARGV;
24 print_config_params();
26 my $dsn = "dbi:$DB_TYPE:";
28 if (($DB_TYPE eq 'Pg') or ($DB_TYPE eq 'mysql')) {
29 $dsn .= "dbname=$DB_DATABASE";
31 $dsn .= ";host=$DB_HOST";
34 $dsn .= ";port=$DB_PORT";
37 elsif ($DB_TYPE eq 'Oracle') {
38 $dsn .= "$DB_DATABASE";
42 if ($ACTION eq 'create') {
43 unless ($DB_TYPE eq 'Oracle') {
44 print "Now creating a database for RT.\n";
45 prompt_for_dba_password();
49 elsif ($ACTION eq 'drop' ) {
50 unless ($DB_TYPE eq 'Oracle') {
51 print "Now dropping the RT2 database.\n";
52 prompt_for_dba_password();
56 elsif ($ACTION eq 'insert' ) {
57 print "Now populating database schema.\n";
58 prompt_for_dba_password();
61 elsif ($ACTION eq 'generate') {
62 prompt_for_dba_password();
66 print STDERR '$ACTION unspecified. Makefile error. It was '.$ACTION ;
71 # {{{ sub prompt_for_dba_password
73 sub prompt_for_dba_password {
74 print "Enter the $DB_TYPE password for $DB_DBA: ";
77 $DB_DBA_PASSWORD = scalar(<STDIN>); #keep off commandline
79 chomp $DB_DBA_PASSWORD;
84 # {{{ sub print_config_params
85 sub print_config_params {
87 Database creation parameters:
93 DB_DBA_PASSWORD = <hidden>
94 DB_DATABASE = $DB_DATABASE
105 About to drop $DB_TYPE database $DB_DATABASE.
106 WARNING: This will erase all data in $DB_DATABASE.
107 If you have an existing RT 2.x installation, this will destroy all your data.
110 exit unless _yesno();
115 print "\nDropping $DB_TYPE database $DB_DATABASE.\n";
116 drop_database( $dsn, $DB_DBA, $DB_DBA_PASSWORD )
117 or warn $DBIx::DataSource::errstr;
123 # {{{ sub generate_schema
124 sub generate_schema {
125 my @schema = generate_schema_from_hash();
126 print "Generating schema for $DB_TYPE...";
128 system('mv', "$SCHEMA_DIR/schema.$DB_TYPE", "$SCHEMA_DIR/schema.$DB_TYPE.bak")
129 if (-f "$SCHEMA_DIR/schema.$DB_TYPE");
130 open(SCHEMA, ">$SCHEMA_DIR/schema.$DB_TYPE");
131 foreach my $line (@schema) {
132 print SCHEMA "$line;\n";
139 # {{{ sub insert_schema
142 print "\nCreating database schema.\n";
144 my $dbh = DBI->connect( $dsn, $DB_DBA, $DB_DBA_PASSWORD ) or die $DBI::errstr;
146 if ( -f "$SCHEMA_DIR/schema.$DB_TYPE") {
147 open (SCHEMA, "<$SCHEMA_DIR/schema.$DB_TYPE");
149 foreach my $line (<SCHEMA>) {
152 $statement =~ s/;$//g;
153 push @schema, $statement;
160 @schema = generate_schema_from_hash();
163 foreach my $statement (@schema) {
164 print STDERR $statement if $DEBUG;
165 my $sth = $dbh->prepare($statement) or die $dbh->errstr;
166 unless ($sth->execute) {
167 print STDERR "Problem with statement:\n $statement\n";
174 print "schema sucessfully inserted\n";
179 # {{{ sub generate_schema_from_hash
180 sub generate_schema_from_hash {
183 require DBIx::DBSchema;
184 my $schema_href = do "$SCHEMA_FILE" or die $@ || $!;
185 my $schema = DBIx::DBSchema->pretty_read($schema_href);
188 foreach my $statement ( $schema->sql($dsn, $DB_DBA, $DB_DBA_PASSWORD ) ) {
189 print STDERR $statement if $DEBUG;
191 push @schema, $statement;
202 print "\nCreating $DB_TYPE database $DB_DATABASE.\n";
203 create_database( $dsn, $DB_DBA, $DB_DBA_PASSWORD )
204 or die $DBIx::DataSource::errstr;
211 print "Proceed [y/N]:";
212 my $x = scalar(<STDIN>);