[freeside-commits] branch master updated. 0296a565242ead37c8b60cd388b5e11c7e03f757

Mark Wells mark at 420.am
Thu Apr 24 13:05:28 PDT 2014


The branch, master has been updated
       via  0296a565242ead37c8b60cd388b5e11c7e03f757 (commit)
      from  f5f14337e9657c96f35fa34a824fffab40bee2c1 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 0296a565242ead37c8b60cd388b5e11c7e03f757
Author: Mark Wells <mark at freeside.biz>
Date:   Thu Apr 24 12:06:48 2014 -0700

    avoid excess memory usage in cust_main location upgrade, #28841

diff --git a/FS/FS/Cursor.pm b/FS/FS/Cursor.pm
index ec7af93..6d02a16 100644
--- a/FS/FS/Cursor.pm
+++ b/FS/FS/Cursor.pm
@@ -57,7 +57,7 @@ sub new {
 
   my $sth = dbh->prepare($statement)
     or die dbh->errstr;
-  my $bind = 0;
+  my $bind = 1;
   foreach my $value ( @{ $q->{value} } ) {
     my $bind_type = shift @{ $q->{bind_type} };
     $sth->bind_param($bind++, $value, $bind_type );
@@ -108,6 +108,12 @@ sub DESTROY {
   dbh->do('CLOSE '. $self->{id}) or die dbh->errstr; # clean-up the cursor in Pg
 }
 
+sub DESTROY {
+  my $self = shift;
+  my $statement = "CLOSE ".$self->{id};
+  dbh->do($statement);
+}  
+
 =back
 
 =head1 TO DO
diff --git a/FS/FS/cust_main/Location.pm b/FS/FS/cust_main/Location.pm
index 4f382af..9899f72 100644
--- a/FS/FS/cust_main/Location.pm
+++ b/FS/FS/cust_main/Location.pm
@@ -4,6 +4,7 @@ use strict;
 use vars qw( $DEBUG $me @location_fields );
 use FS::Record qw(qsearch qsearchs);
 use FS::UID qw(dbh);
+use FS::Cursor;
 use FS::cust_location;
 
 use Carp qw(carp);
@@ -137,6 +138,7 @@ sub _upgrade_data {
     || new FS::contact_class { classname => 'Service'};
 
   if ( !$service_contact_class->classnum ) {
+    warn "Creating service contact class.\n";
     $error = $service_contact_class->insert;
     die "error creating contact class for Service: $error" if $error;
   }
@@ -158,11 +160,12 @@ sub _upgrade_data {
     }
   }
 
-  foreach my $cust_main (qsearch('cust_main', {
-                           bill_locationnum => '',
-                           address1         => { op=>'!=', value=>'' },
-                        }))
-  {
+  warn "Migrating customer locations.\n";
+  my $search = FS::Cursor->new('cust_main',
+                        { bill_locationnum  => '',
+                          address1          => { op=>'!=', value=>'' }
+                        });
+  while (my $cust_main = $search->fetch) {
     # Step 1: extract billing and service addresses into cust_location
     my $custnum = $cust_main->custnum;
     my $bill_location = FS::cust_location->new(
@@ -287,9 +290,9 @@ sub _upgrade_data {
       if $error;
 
     # Step 4: set packages at the "default service location" to ship_location
-    foreach my $cust_pkg (
-      qsearch('cust_pkg', { custnum => $custnum, locationnum => '' })  
-    ) {
+    my $pkg_search =
+      FS::Cursor->new('cust_pkg', { custnum => $custnum, locationnum => '' });
+    while (my $cust_pkg = $pkg_search->fetch) {
       # not a location change
       $cust_pkg->set('locationnum', $cust_main->ship_locationnum);
       $error = $cust_pkg->replace;
@@ -297,7 +300,7 @@ sub _upgrade_data {
         if $error;
     }
 
-  } #foreach $cust_main
+  } #while (my $cust_main...)
 
   # repair an error in earlier upgrades
   if (!FS::upgrade_journal->is_done('cust_location_censustract_repair')

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/Cursor.pm             |    8 +++++++-
 FS/FS/cust_main/Location.pm |   21 ++++++++++++---------
 2 files changed, 19 insertions(+), 10 deletions(-)




More information about the freeside-commits mailing list