From 5173b6cbadea03c8525218f09794b3f74ab12d96 Mon Sep 17 00:00:00 2001 From: miketosh Date: Sun, 23 Oct 2011 14:18:04 +0200 Subject: Bug 690173: Cannot delete user accounts due to FK on audit_log r/a=mkanat --- Bugzilla/DB/Schema.pm | 3 ++- Bugzilla/Install/DB.pm | 12 ++++++++++++ Bugzilla/User.pm | 12 ++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) (limited to 'Bugzilla') diff --git a/Bugzilla/DB/Schema.pm b/Bugzilla/DB/Schema.pm index 33527c367..6d9a33ef7 100644 --- a/Bugzilla/DB/Schema.pm +++ b/Bugzilla/DB/Schema.pm @@ -516,7 +516,8 @@ use constant ABSTRACT_SCHEMA => { FIELDS => [ user_id => {TYPE => 'INT3', REFERENCES => {TABLE => 'profiles', - COLUMN => 'userid'}}, + COLUMN => 'userid', + DELETE => 'SET NULL'}}, class => {TYPE => 'varchar(255)', NOTNULL => 1}, object_id => {TYPE => 'INT4', NOTNULL => 1}, field => {TYPE => 'varchar(64)', NOTNULL => 1}, diff --git a/Bugzilla/Install/DB.pm b/Bugzilla/Install/DB.pm index 5ce3c7a4e..84267de41 100644 --- a/Bugzilla/Install/DB.pm +++ b/Bugzilla/Install/DB.pm @@ -656,6 +656,9 @@ sub update_table_definitions { # 2011-06-15 dkl@mozilla.com - Bug 658929 _migrate_disabledtext_boolean(); + # 2011-10-11 miketosh - Bug 690173 + _on_delete_set_null_for_audit_log_userid(); + ################################################################ # New --TABLE-- changes should go *** A B O V E *** this point # ################################################################ @@ -3602,6 +3605,15 @@ sub _rename_tags_to_tag { } } +sub _on_delete_set_null_for_audit_log_userid { + my $dbh = Bugzilla->dbh; + my $fk = $dbh->bz_fk_info('audit_log', 'user_id'); + if ($fk and !defined $fk->{DELETE}) { + $fk->{DELETE} = 'SET NULL'; + $dbh->bz_alter_fk('audit_log', 'user_id', $fk); + } +} + 1; __END__ diff --git a/Bugzilla/User.pm b/Bugzilla/User.pm index 48ce41a57..849c1d915 100644 --- a/Bugzilla/User.pm +++ b/Bugzilla/User.pm @@ -1763,6 +1763,18 @@ sub mail_settings { return $self->{'mail_settings'}; } +sub has_audit_entries { + my $self = shift; + my $dbh = Bugzilla->dbh; + + if (!exists $self->{'has_audit_entries'}) { + $self->{'has_audit_entries'} = + $dbh->selectrow_array('SELECT 1 FROM audit_log WHERE user_id = ? ' . + $dbh->sql_limit(1), undef, $self->id); + } + return $self->{'has_audit_entries'}; +} + sub is_insider { my $self = shift; -- cgit v1.2.3-24-g4f1b