X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Freason.pm;h=5311ec5aa6892d3772ce8e6e4d5b85f1e4a4c76c;hb=424fe0122a3bdb605cfb749f1fd8596e8d076538;hp=08e76deef46863831f2fe9901a3a6862d999a6f6;hpb=9509e5bfb7f9331303153cac24d7bfecbe2ea9f1;p=freeside.git diff --git a/FS/FS/reason.pm b/FS/FS/reason.pm index 08e76deef..5311ec5aa 100644 --- a/FS/FS/reason.pm +++ b/FS/FS/reason.pm @@ -1,11 +1,16 @@ package FS::reason; use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); +use vars qw( @ISA $DEBUG $me ); +use DBIx::DBSchema; +use DBIx::DBSchema::Table; +use DBIx::DBSchema::Column; +use FS::Record qw( qsearch qsearchs dbh dbdef ); use FS::reason_type; @ISA = qw(FS::Record); +$DEBUG = 0; +$me = '[FS::reason]'; =head1 NAME @@ -109,6 +114,60 @@ sub reasontype { qsearchs( 'reason_type', { 'typenum' => shift->reason_type } ); } +# _upgrade_data +# +# Used by FS::Upgrade to migrate to a new database. +# +# + +sub _upgrade_data { # class method + my ($self, %opts) = @_; + my $dbh = dbh; + + warn "$me upgrading $self\n" if $DEBUG; + + my $column = dbdef->table($self->table)->column('reason'); + unless ($column->type eq 'text') { # assume history matches main table + + # ideally this would be supported in DBIx-DBSchema and friends + warn "$me Shifting reason column to type 'text'\n" if $DEBUG; + foreach my $table ( $self->table, 'h_'. $self->table ) { + my @sql = (); + + $column = dbdef->table($self->table)->column('reason'); + my $columndef = $column->line($dbh); + $columndef =~ s/varchar\(\d+\)/text/i; + + if ( $dbh->{Driver}->{Name} eq 'Pg' ) { + + my $notnull = $columndef =~ s/not null//i; + push @sql,"ALTER TABLE $table RENAME reason TO freeside_upgrade_reason"; + push @sql,"ALTER TABLE $table ADD $columndef"; + push @sql,"UPDATE $table SET reason = freeside_upgrade_reason"; + push @sql,"ALTER TABLE $table ALTER reason SET NOT NULL" + if $notnull; + push @sql,"ALTER TABLE $table DROP freeside_upgrade_reason"; + + } elsif ( $dbh->{Driver}->{Name} =~ /^mysql/i ){ + + #crap, this isn't working + #push @sql,"ALTER TABLE $table MODIFY reason ". $column->line($dbh); + warn "WARNING: reason table upgrade not yet supported for mysql, sorry"; + + } else { + die "watchu talkin' 'bout, Willis? (unsupported database type)"; + } + + foreach (@sql) { + my $sth = $dbh->prepare($_) or die $dbh->errstr; + $sth->execute or die $sth->errstr; + } + } + } + + ''; + +} =back =head1 BUGS