move all the schema-updating magic into DBIx::DBSchema
[freeside.git] / FS / bin / freeside-upgrade
1 #!/usr/bin/perl -w
2
3 use strict;
4 use vars qw($DEBUG $DRY_RUN);
5 use Term::ReadKey;
6 use DBIx::DBSchema 0.31;
7 use FS::UID qw(adminsuidsetup checkeuid datasrc );  #getsecrets);
8 use FS::Schema qw( dbdef dbdef_dist reload_dbdef );
9
10 $DEBUG = 1;
11
12 die "Not running uid freeside!" unless checkeuid();
13
14 my $user = shift or die &usage;
15 my $dbh = adminsuidsetup($user);
16
17 #needs to match FS::Schema...
18 my $dbdef_file = "/usr/local/etc/freeside/dbdef.". datasrc;
19
20 dbdef_create($dbh, $dbdef_file);
21
22 delete $FS::Schema::dbdef_cache{$dbdef_file}; #force an actual reload
23 reload_dbdef($dbdef_file);
24
25 $DBIx::DBSchema::DEBUG = $DEBUG;
26 $DBIx::DBSchema::Table::DEBUG = $DEBUG;
27 dbdef->update_schema( dbdef_dist, $dbh );
28
29 $dbh->commit or die $dbh->errstr;
30
31 dbdef_create($dbh, $dbdef_file);
32
33 $dbh->disconnect or die $dbh->errstr;
34
35 ###
36
37 sub dbdef_create { # reverse engineer the schema from the DB and save to file
38   my( $dbh, $file ) = @_;
39   my $dbdef = new_native DBIx::DBSchema $dbh;
40   $dbdef->save($file);
41 }
42
43 sub usage {
44   die "Usage:\n  freeside-upgrade user\n"; 
45 }
46
47 1;