X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fpassword_history.pm;h=a34f6169b137ce6a8aea60018721a0953b6af833;hp=dd527b980403d12fb56ffd789c7c7d3f7bc3e350;hb=d1f9776b822ae835ba5374dca3f76ce3ee76e5dc;hpb=24d75c7bb38b8729a40f1468f64d5cf76fb6fef7 diff --git a/FS/FS/password_history.pm b/FS/FS/password_history.pm index dd527b980..a34f6169b 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