]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug #93667: Rewrite single cross checking.
authormatty%chariot.net.au <>
Sat, 5 Oct 2002 21:14:22 +0000 (21:14 +0000)
committermatty%chariot.net.au <>
Sat, 5 Oct 2002 21:14:22 +0000 (21:14 +0000)
sanitycheck.cgi

index 4e79bed6ca36ba61de41524c12e695c6251c2aa1..34f93b69030404633ca6fed8094d43a5163f0f40 100755 (executable)
@@ -74,33 +74,34 @@ sub AlertBadVoteCache {
 sub CrossCheck {
     my $table = shift @_;
     my $field = shift @_;
+
     Status("Checking references to $table.$field");
-    SendSQL("SELECT DISTINCT $field FROM $table");
-    my %valid;
-    while (MoreSQLData()) {
-        $valid{FetchOneColumn()} = 1;
-    }
+
     while (@_) {
         my $ref = shift @_;
-        my ($t2, $f2, $key2, $exceptions) = @$ref;
+        my ($refertable, $referfield, $keyname, $exceptions) = @$ref;
 
         $exceptions ||= [];
         my %exceptions = map { $_ => 1 } @$exceptions;
 
-        Status("... from $t2.$f2");
+        Status("... from $refertable.$referfield");
         
-        SendSQL("SELECT DISTINCT $f2" . ($key2 ? ", $key2" : '') ." FROM $t2 "
-                . "WHERE $f2 IS NOT NULL");
+        SendSQL("SELECT DISTINCT $refertable.$referfield" . ($keyname ? ", $refertable.$keyname" : '') . " " .
+                "FROM   $refertable LEFT JOIN $table " .
+                "  ON   $refertable.$referfield = $table.$field " .
+                "WHERE  $table.$field IS NULL " .
+                "  AND  $refertable.$referfield IS NOT NULL");
+
         while (MoreSQLData()) {
             my ($value, $key) = FetchSQLData();
-            if (!$valid{$value} && !$exceptions{$value}) {
-                my $alert = "Bad value $value found in $t2.$f2";
-                if ($key2) {
-                    if ($key2 eq 'bug_id') {
-                        $alert .= qq{ (<a href="show_bug.cgi?id=$key">bug $key</a>)};
+            if (!$exceptions{$value}) {
+                my $alert = "Bad value $value found in $refertable.$referfield";
+                if ($keyname) {
+                    if ($keyname eq 'bug_id') {
+                        $alert .= ' (bug ' . BugLink($key) . ')';
                     }
                     else {
-                        $alert .= " ($key2 == '$key')";
+                        $alert .= " ($keyname == '$key')";
                     }
                 }
                 Alert($alert);