diff options
author | Mark Wells <mark@freeside.biz> | 2016-05-19 16:57:06 -0700 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2016-05-19 16:59:18 -0700 |
commit | 02efed3da5453ada38ba386c7226fcfd99b44ba3 (patch) | |
tree | e8b01f8c43d1d5e4dc2dab9518b1ad5034fd5f66 /FS | |
parent | 71b0cae95c75843bcb80855b696d49d4752dbe35 (diff) |
fix some dangling records on upgrade, #32456 and #38765
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/Upgrade.pm | 4 | ||||
-rw-r--r-- | FS/FS/cust_pay_pending.pm | 13 | ||||
-rw-r--r-- | FS/FS/password_history.pm | 23 |
3 files changed, 39 insertions, 1 deletions
diff --git a/FS/FS/Upgrade.pm b/FS/FS/Upgrade.pm index 1aae55d..4889ff7 100644 --- a/FS/FS/Upgrade.pm +++ b/FS/FS/Upgrade.pm @@ -529,7 +529,9 @@ sub upgrade_schema_data { 'cust_bill_pkg_detail' => [], #add necessary columns to RT schema 'TicketSystem' => [], - + #remove possible dangling records + 'password_history' => [], + 'cust_pay_pending' => [], ; \%hash; diff --git a/FS/FS/cust_pay_pending.pm b/FS/FS/cust_pay_pending.pm index 1a54203..dfb07b8 100644 --- a/FS/FS/cust_pay_pending.pm +++ b/FS/FS/cust_pay_pending.pm @@ -470,6 +470,19 @@ sub _upgrade_data { #class method } +sub _upgrade_schema { + my ($class, %opts) = @_; + + # fix records where jobnum points to a nonexistent queue job + my $sql = 'UPDATE cust_pay_pending SET jobnum = NULL + WHERE NOT EXISTS ( + SELECT 1 FROM queue WHERE queue.jobnum = cust_pay_pending.jobnum + )'; + my $sth = dbh->prepare($sql) or die dbh->errstr; + $sth->execute or die $sth->errstr; + ''; +} + =back =head1 BUGS diff --git a/FS/FS/password_history.pm b/FS/FS/password_history.pm index dd527b9..a34f616 100644 --- a/FS/FS/password_history.pm +++ b/FS/FS/password_history.pm @@ -160,6 +160,29 @@ sub password_equals { } +sub _upgrade_schema { + # clean up history records where linked_acct has gone away + my @where; + for my $fk ( grep /__/, __PACKAGE__->dbdef_table->columns ) { + my ($table, $key) = split(/__/, $fk); + push @where, " + ( $fk IS NOT NULL AND NOT EXISTS(SELECT 1 FROM $table WHERE $table.$key = $fk) )"; + } + my @recs = qsearch({ + 'table' => 'password_history', + 'extra_sql' => ' WHERE ' . join(' AND ', @where), + }); + my $error; + if (@recs) { + warn "Removing unattached password_history records (".scalar(@recs).").\n"; + foreach my $password_history (@recs) { + $error = $password_history->delete; + die $error if $error; + } + } + ''; +} + =back =head1 BUGS |