From 9f845218894ad8cf48c5cfe8fb4fb492e174c0f2 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Fri, 24 Feb 2017 10:22:27 -0800 Subject: [PATCH] fix upgrades when cust_pkg.change_to_pkgnum points to a package that was removed, RT#74825 --- FS/FS/Upgrade.pm | 2 ++ FS/FS/cust_pkg.pm | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/FS/FS/Upgrade.pm b/FS/FS/Upgrade.pm index a59dc1fc9..628b6f2bb 100644 --- a/FS/FS/Upgrade.pm +++ b/FS/FS/Upgrade.pm @@ -567,6 +567,8 @@ sub upgrade_schema_data { #remove records referencing removed things with their FKs 'pkg_referral' => [], 'cust_bill_pkg_discount' => [], + #update records referencing removed things with their FKs + 'cust_pkg' => [], ; \%hash; diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index 1d0cc4fbc..039943e52 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -5560,6 +5560,23 @@ sub forward_emails { } # Used by FS::Upgrade to migrate to a new database. +sub _upgrade_schema { # class method + my ($class, %opts) = @_; + + my $sql = ' + UPDATE cust_pkg SET change_to_pkgnum = NULL + WHERE change_to_pkgnum IS NOT NULL + AND NOT EXISTS ( SELECT 1 FROM cust_pkg AS ctcp + WHERE ctcp.pkgnum = cust_pkg.change_to_pkgnum + ) + '; + + my $sth = dbh->prepare($sql) or die dbh->errstr; + $sth->execute or die $sth->errstr; + ''; +} + +# Used by FS::Upgrade to migrate to a new database. sub _upgrade_data { # class method my ($class, %opts) = @_; $class->_upgrade_otaker(%opts); -- 2.11.0