[freeside-commits] freeside/FS/FS Upgrade.pm, 1.27, 1.28 tax_rate.pm, 1.22, 1.23

Jeff Finucane,420,, jeff at wavetail.420.am
Tue Mar 17 09:06:34 PDT 2009


Update of /home/cvs/cvsroot/freeside/FS/FS
In directory wavetail.420.am:/tmp/cvs-serv23213/FS/FS

Modified Files:
	Upgrade.pm tax_rate.pm 
Log Message:
column upgrade for tax_rate RT#4903)

Index: tax_rate.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/tax_rate.pm,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- tax_rate.pm	15 Feb 2009 17:38:21 -0000	1.22
+++ tax_rate.pm	17 Mar 2009 16:06:31 -0000	1.23
@@ -3,11 +3,14 @@
 use strict;
 use vars qw( @ISA $DEBUG $me
              %tax_unittypes %tax_maxtypes %tax_basetypes %tax_authorities
-             %tax_passtypes );
+             %tax_passtypes %GetInfoType );
 use Date::Parse;
 use Storable qw( thaw );
 use MIME::Base64;
-use FS::Record qw( qsearch qsearchs dbh );
+use DBIx::DBSchema;
+use DBIx::DBSchema::Table;
+use DBIx::DBSchema::Column;
+use FS::Record qw( qsearch qsearchs dbh dbdef );
 use FS::tax_class;
 use FS::cust_bill_pkg;
 use FS::cust_tax_location;
@@ -1063,6 +1066,67 @@
   return ($query, "SELECT COUNT(*) FROM tax_rate $extra_sql");
 }
 
+# _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 = qw ( tax excessrate usetax useexcessrate fee excessfee
+                    feebase feemax );
+
+  if ( $dbh->{Driver}->{Name} eq 'Pg' ) {
+
+    eval "use DBI::Const::GetInfoType;";
+    die $@ if $@;
+
+    my $major_version = 0;
+    $dbh->get_info( $GetInfoType{SQL_DBMS_VER} ) =~ /^(\d{2})/
+      && ( $major_version = sprintf("%d", $1) );
+
+    if ( $major_version > 7 ) {
+
+      # ideally this would be supported in DBIx-DBSchema and friends
+
+      foreach my $column ( @column ) {
+        my $columndef = dbdef->table($self->table)->column($column);
+        unless ($columndef->type eq 'numeric') {
+
+          warn "updating tax_rate column $column to numeric\n" if $DEBUG;
+          my $sql = "ALTER TABLE tax_rate ALTER $column TYPE numeric(14,8)";
+          my $sth = $dbh->prepare($sql) or die $dbh->errstr;
+          $sth->execute or die $sth->errstr;
+
+          warn "updating h_tax_rate column $column to numeric\n" if $DEBUG;
+          $sql = "ALTER TABLE h_tax_rate ALTER $column TYPE numeric(14,8)";
+          $sth = $dbh->prepare($sql) or die $dbh->errstr;
+          $sth->execute or die $sth->errstr;
+
+        }
+      }
+
+    } else {
+
+      warn "WARNING: tax_rate table upgrade unsupported for this Pg version\n";
+
+    }
+
+  } else {
+
+    warn "WARNING: tax_rate table upgrade only supported for Pg 8+\n";
+
+  }
+
+  '';
+
+}
+
 =back
 
 =head1 BUGS

Index: Upgrade.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/Upgrade.pm,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- Upgrade.pm	22 Feb 2009 21:08:00 -0000	1.27
+++ Upgrade.pm	17 Mar 2009 16:06:31 -0000	1.28
@@ -126,6 +126,9 @@
     #fixup access rights
     'access_right' => [],
 
+    #change tax_rate column types
+    'tax_rate' => [],
+
   ;
 
   \%hash;



More information about the freeside-commits mailing list