summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorivan <ivan>2009-06-04 00:49:47 +0000
committerivan <ivan>2009-06-04 00:49:47 +0000
commitcce53fdf4528bbb3571d2b73f6f25d87c9af6f67 (patch)
treeb2612208a165bde78da657165c0a6cb2949337db /bin
parentcb12ce54d4f5a5b2de0964d2ded05493b372d9d2 (diff)
add a -m mode to improve performance so upgrade can complete for large databases, RT#5426
Diffstat (limited to 'bin')
-rw-r--r--bin/freeside-migrate-events68
1 files changed, 45 insertions, 23 deletions
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