X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FUpgrade.pm;h=185ba16fcb2123d2c827f708a85589c234620ec5;hb=d9c554c746466a20bbbbc2eb69fc737cfe598316;hp=b7a1c661a8b2395af4b6c38277342ae068bc71f6;hpb=39a2828f29728d34af96fc6e0aef23ea01f7a7a2;p=freeside.git diff --git a/FS/FS/Upgrade.pm b/FS/FS/Upgrade.pm index b7a1c661a..185ba16fc 100644 --- a/FS/FS/Upgrade.pm +++ b/FS/FS/Upgrade.pm @@ -12,7 +12,7 @@ use FS::svc_domain; $FS::svc_domain::whois_hack = 1; @ISA = qw( Exporter ); -@EXPORT_OK = qw( upgrade upgrade_sqlradius ); +@EXPORT_OK = qw( upgrade_schema upgrade upgrade_sqlradius ); $DEBUG = 1; @@ -33,7 +33,7 @@ database upgrades. =over 4 -=item +=item upgrade =cut @@ -86,6 +86,9 @@ sub upgrade { } +=item upgrade_data + +=cut sub upgrade_data { my %opt = @_; @@ -166,6 +169,67 @@ sub upgrade_data { } +=item upgrade_schema + +=cut + +sub upgrade_schema { + my %opt = @_; + + my $data = upgrade_schema_data(%opt); + + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + local $FS::UID::AutoCommit = 0; + + foreach my $table ( keys %$data ) { + + my $class = "FS::$table"; + eval "use $class;"; + die $@ if $@; + + if ( $class->can('_upgrade_schema') ) { + warn "Upgrading $table schema...\n"; + + my $start = time; + + $class->_upgrade_schema(%opt); + + if ( $oldAutoCommit ) { + warn " committing\n"; + dbh->commit or die dbh->errstr; + } + + #warn "\e[1K\rUpgrading $table... done in ". (time-$start). " seconds\n"; + warn " done in ". (time-$start). " seconds\n"; + + } else { + warn "WARNING: asked for schema upgrade of $table,". + " but FS::$table has no _upgrade_schema method\n"; + } + + } + +} + +=item upgrade_schema_data + +=cut + +sub upgrade_schema_data { + my %opt = @_; + + tie my %hash, 'Tie::IxHash', + + #fix classnum character(1) + 'cust_bill_pkg_detail' => [], + + ; + + \%hash; + +} + sub upgrade_sqlradius { #my %opt = @_;