From 1194a36cb5aabda90791a82b0477e7ab75074c16 Mon Sep 17 00:00:00 2001 From: "mkanat%kerio.com" Date: Fri, 11 Mar 2005 19:45:03 +0000 Subject: [PATCH] Bug 285692: lastdiffed should use NULL instead of the "beginning of time" Patch By Max Kanat-Alexander r=glob, a=myk git-svn-id: svn://10.0.0.236/trunk@170574 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/webtools/bugzilla/Bugzilla/BugMail.pm | 15 ++++++--------- mozilla/webtools/bugzilla/Bugzilla/DB/Schema.pm | 2 +- mozilla/webtools/bugzilla/checksetup.pl | 5 ++++- .../bugzilla/contrib/sendunsentbugmail.pl | 6 ++++-- mozilla/webtools/bugzilla/editproducts.cgi | 4 ++-- mozilla/webtools/bugzilla/globals.pl | 15 ++++++++------- mozilla/webtools/bugzilla/sanitycheck.cgi | 5 +++-- 7 files changed, 28 insertions(+), 24 deletions(-) diff --git a/mozilla/webtools/bugzilla/Bugzilla/BugMail.pm b/mozilla/webtools/bugzilla/Bugzilla/BugMail.pm index 1221dcfbc4c..ba7c641df84 100644 --- a/mozilla/webtools/bugzilla/Bugzilla/BugMail.pm +++ b/mozilla/webtools/bugzilla/Bugzilla/BugMail.pm @@ -172,9 +172,6 @@ sub ProcessOneBug($) { $values{component} = get_component_name($values{component_id}); my ($start, $end) = (@row); - # $start and $end are considered safe because users can't touch them - trick_taint($start); - trick_taint($end); my $cc_ref = Bugzilla->dbh->selectcol_arrayref( q{SELECT profiles.login_name FROM cc, profiles @@ -220,15 +217,16 @@ sub ProcessOneBug($) { my @diffs; - + # If lastdiffed is NULL, then we don't limit the search on time. + my $when_restriction = $start ? + " AND bug_when > '$start' AND bug_when <= '$end'" : ''; SendSQL("SELECT profiles.login_name, fielddefs.description, " . " bug_when, removed, added, attach_id, fielddefs.name " . "FROM bugs_activity, fielddefs, profiles " . "WHERE bug_id = $id " . " AND fielddefs.fieldid = bugs_activity.fieldid " . " AND profiles.userid = who " . - " AND bug_when > '$start' " . - " AND bug_when <= '$end' " . + $when_restriction . "ORDER BY bug_when" ); @@ -280,8 +278,7 @@ sub ProcessOneBug($) { " AND fielddefs.fieldid = bugs_activity.fieldid" . " AND (fielddefs.name = 'bug_status' " . " OR fielddefs.name = 'resolution') " . - " AND bug_when > '$start' " . - " AND bug_when <= '$end' " . + $when_restriction . "ORDER BY bug_when, bug_id"); my $thisdiff = ""; @@ -829,7 +826,7 @@ sub NewProcessOnePerson ($$$$$$$$$$$$$) { } } - my $isnew = ($start !~ m/[1-9]/); + my $isnew = !$start; my %substs; diff --git a/mozilla/webtools/bugzilla/Bugzilla/DB/Schema.pm b/mozilla/webtools/bugzilla/Bugzilla/DB/Schema.pm index a879684ea5f..9a156a1b0eb 100644 --- a/mozilla/webtools/bugzilla/Bugzilla/DB/Schema.pm +++ b/mozilla/webtools/bugzilla/Bugzilla/DB/Schema.pm @@ -154,7 +154,7 @@ use constant ABSTRACT_SCHEMA => { # comes from the keywords table keywords => {TYPE => 'MEDIUMTEXT', NOTNULL => 1, DEFAULT => "''"}, - lastdiffed => {TYPE => 'DATETIME', NOTNULL => 1}, + lastdiffed => {TYPE => 'DATETIME'}, everconfirmed => {TYPE => 'BOOLEAN', NOTNULL => 1}, reporter_accessible => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE'}, diff --git a/mozilla/webtools/bugzilla/checksetup.pl b/mozilla/webtools/bugzilla/checksetup.pl index dcf6a30afa9..f93b3349a74 100755 --- a/mozilla/webtools/bugzilla/checksetup.pl +++ b/mozilla/webtools/bugzilla/checksetup.pl @@ -2180,7 +2180,7 @@ if ($dbh->bz_get_field_def('bugs_activity', 'field')) { # http://bugzilla.mozilla.org/show_bugs.cgi?id=71552 if (!$dbh->bz_get_field_def('bugs', 'lastdiffed')) { - $dbh->bz_add_field('bugs', 'lastdiffed', 'datetime not null'); + $dbh->bz_add_field('bugs', 'lastdiffed', 'datetime'); $dbh->do('UPDATE bugs SET lastdiffed = now(), delta_ts = delta_ts'); } @@ -3846,10 +3846,13 @@ $dbh->bz_change_field_type('bugs', 'votes', 'mediumint not null default 0'); # 2005-03-03 travis@sedsystems.ca -- Bug 41972 add_setting ("display_quips", {"on" => 1, "off" => 2 }, "on" ); +$dbh->bz_change_field_type('bugs', 'lastdiffed', 'datetime'); + } # END LEGACY CHECKS + # If you had to change the --TABLE-- definition in any way, then add your # differential change code *** A B O V E *** this comment. # diff --git a/mozilla/webtools/bugzilla/contrib/sendunsentbugmail.pl b/mozilla/webtools/bugzilla/contrib/sendunsentbugmail.pl index 35b6a494131..9184e0be22d 100755 --- a/mozilla/webtools/bugzilla/contrib/sendunsentbugmail.pl +++ b/mozilla/webtools/bugzilla/contrib/sendunsentbugmail.pl @@ -30,8 +30,10 @@ use Bugzilla::Constants; use Bugzilla::BugMail; my $dbh = Bugzilla->dbh; -SendSQL("SELECT bug_id FROM bugs WHERE lastdiffed < delta_ts AND - delta_ts < NOW() - " . $dbh->sql_interval('30 minute') . +SendSQL("SELECT bug_id FROM bugs + WHERE lastdiffed IS NULL + OR lastdiffed < delta_ts AND delta_ts < NOW() - " + . $dbh->sql_interval('30 minute') . " ORDER BY bug_id"); my @list; while (MoreSQLData()) { diff --git a/mozilla/webtools/bugzilla/editproducts.cgi b/mozilla/webtools/bugzilla/editproducts.cgi index ea4bc5e5bdd..de0c874e2d7 100755 --- a/mozilla/webtools/bugzilla/editproducts.cgi +++ b/mozilla/webtools/bugzilla/editproducts.cgi @@ -1187,7 +1187,7 @@ if ($action eq 'updategroupcontrols') { LogActivityEntry($bugid, "bug_group", $removed, "", $::userid, $timestamp); my $diffed = ""; - if ($mailiscurrent != 0) { + if ($mailiscurrent) { $diffed = ", lastdiffed = " . SqlQuote($timestamp); } SendSQL("UPDATE bugs SET delta_ts = " . SqlQuote($timestamp) . @@ -1221,7 +1221,7 @@ if ($action eq 'updategroupcontrols') { LogActivityEntry($bugid, "bug_group", "", $added, $::userid, $timestamp); my $diffed = ""; - if ($mailiscurrent != 0) { + if ($mailiscurrent) { $diffed = ", lastdiffed = " . SqlQuote($timestamp); } SendSQL("UPDATE bugs SET delta_ts = " . SqlQuote($timestamp) . diff --git a/mozilla/webtools/bugzilla/globals.pl b/mozilla/webtools/bugzilla/globals.pl index b0a8feca80c..6e0ebd774ab 100644 --- a/mozilla/webtools/bugzilla/globals.pl +++ b/mozilla/webtools/bugzilla/globals.pl @@ -924,15 +924,16 @@ sub GetLongDescriptionAsText { "WHERE profiles.userid = longdescs.who " . "AND longdescs.bug_id = $id "); - if ($start && $start =~ /[1-9]/) { - # If $start is not all zeros, obtain the count-index + # $start will be undef for New bugs, and defined for pre-existing bugs. + if ($start) { + # If $start is not NULL, obtain the count-index # of this comment for the leading "Comment #xxx" line.) - $query .= "AND longdescs.bug_when > '$start'"; - SendSQL("SELECT count(*) FROM longdescs WHERE bug_id = $id AND bug_when <= '$start'"); + SendSQL("SELECT count(*) FROM longdescs " . + " WHERE bug_id = $id AND bug_when <= '$start'"); ($count) = (FetchSQLData()); - } - if ($end) { - $query .= "AND longdescs.bug_when <= '$end'"; + + $query .= " AND longdescs.bug_when > '$start'" + . " AND longdescs.bug_when <= '$end' "; } $query .= "ORDER BY longdescs.bug_when"; diff --git a/mozilla/webtools/bugzilla/sanitycheck.cgi b/mozilla/webtools/bugzilla/sanitycheck.cgi index 30a07be5bac..2a51a316963 100755 --- a/mozilla/webtools/bugzilla/sanitycheck.cgi +++ b/mozilla/webtools/bugzilla/sanitycheck.cgi @@ -178,7 +178,8 @@ if (defined $cgi->param('rescanallBugMail')) { require Bugzilla::BugMail; Status("OK, now attempting to send unsent mail"); - SendSQL("SELECT bug_id FROM bugs WHERE lastdiffed < delta_ts AND + SendSQL("SELECT bug_id FROM bugs + WHERE (lastdiffed IS NULL OR lastdiffed < delta_ts) AND delta_ts < now() - " . $dbh->sql_interval('30 minute') . " ORDER BY bug_id"); my @list; @@ -737,7 +738,7 @@ Status("Checking for unsent mail"); @badbugs = (); SendSQL("SELECT bug_id " . - "FROM bugs WHERE lastdiffed < delta_ts AND ". + "FROM bugs WHERE (lastdiffed IS NULL OR lastdiffed < delta_ts) AND " . "delta_ts < now() - " . $dbh->sql_interval('30 minute') . " ORDER BY bug_id");