From: ivan Date: Thu, 4 Jun 2009 00:49:47 +0000 (+0000) Subject: add a -m mode to improve performance so upgrade can complete for large databases... X-Git-Tag: root_of_svc_elec_features~1145 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=cce53fdf4528bbb3571d2b73f6f25d87c9af6f67 add a -m mode to improve performance so upgrade can complete for large databases, RT#5426 --- diff --git a/bin/freeside-migrate-events b/bin/freeside-migrate-events index 4b46393eb..522d4b17c 100644 --- a/bin/freeside-migrate-events +++ b/bin/freeside-migrate-events @@ -1,14 +1,17 @@ #!/usr/bin/perl -w use strict; - -use FS::UID qw(adminsuidsetup); +use Getopt::Std; +use FS::UID qw( adminsuidsetup dbh ); use FS::Record qw( qsearch ); use FS::part_bill_event; use FS::part_event; use FS::cust_bill_event; use FS::cust_event; +use vars qw( $opt_m ); +getopts('m'); + my $user = shift or die &usage; adminsuidsetup($user); @@ -139,29 +142,46 @@ foreach my $part_bill_event ( #my $derror = $part_bill_event->delete; #die "error removing part_bill_event: $derror\n" if $derror; - foreach my $cust_bill_event ( - qsearch({ - 'table' => 'cust_bill_event', - 'hashref' => { 'eventpart' => $part_bill_event->eventpart, }, - }) - ) { - - my $cust_event = new FS::cust_event { - 'eventpart' => $part_event->eventpart, - 'tablenum' => $cust_bill_event->invnum, - '_date' => $cust_bill_event->_date, - 'status' => $cust_bill_event->status, - 'statustext' => $cust_bill_event->statustext, - }; + if ( $opt_m ) { - my $cerror = $cust_event->insert; - #die "error inserting cust_event: $cerror\n" if $cerror; - warn "error inserting cust_event: $cerror\n" if $cerror; - - #my $dcerror = $cust_bill_event->delete; - #die "error removing cust_bill_event: $dcerror\n" if $dcerror; + #this should probably just become the default once we're sure it works 100% + + my $sth = dbh->prepare(' + INSERT INTO cust_event ( eventpart, tablenum, _date, status, statustext ) + SELECT ? , invnum , _date, status, statustext + FROM cust_bill_event WHERE eventpart = ? + ') or die dbh->errstr; + + $sth->execute( $part_event->eventpart, $part_bill_event->eventpart ) + or die $sth->errstr; + + } else { - print "."; + foreach my $cust_bill_event ( + qsearch({ + 'table' => 'cust_bill_event', + 'hashref' => { 'eventpart' => $part_bill_event->eventpart, }, + }) + ) { + + my $cust_event = new FS::cust_event { + 'eventpart' => $part_event->eventpart, + 'tablenum' => $cust_bill_event->invnum, + '_date' => $cust_bill_event->_date, + 'status' => $cust_bill_event->status, + 'statustext' => $cust_bill_event->statustext, + }; + + my $cerror = $cust_event->insert; + #die "error inserting cust_event: $cerror\n" if $cerror; + warn "error inserting cust_event: $cerror\n" if $cerror; + + #my $dcerror = $cust_bill_event->delete; + #die "error removing cust_bill_event: $dcerror\n" if $dcerror; + + print "."; + + } } @@ -198,6 +218,8 @@ Doesn't migrate reasons. Doesn't delete the old events (which is not a big deal, since the new code won't run them...) +Can take lots of memory for large databases. + =head1 SEE ALSO =cut