From 4910b3f9485a928091d98e5da83b16cebae33eed Mon Sep 17 00:00:00 2001 From: "mkanat%kerio.com" <> Date: Sat, 12 Mar 2005 03:45:01 +0000 Subject: Bug 285692: lastdiffed should use NULL instead of the "beginning of time" Patch By Max Kanat-Alexander r=glob, a=myk --- Bugzilla/BugMail.pm | 15 ++++++--------- Bugzilla/DB/Schema.pm | 2 +- checksetup.pl | 5 ++++- contrib/sendunsentbugmail.pl | 6 ++++-- editproducts.cgi | 4 ++-- globals.pl | 15 ++++++++------- sanitycheck.cgi | 5 +++-- 7 files changed, 28 insertions(+), 24 deletions(-) diff --git a/Bugzilla/BugMail.pm b/Bugzilla/BugMail.pm index 1221dcfbc..ba7c641df 100644 --- a/Bugzilla/BugMail.pm +++ b/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/Bugzilla/DB/Schema.pm b/Bugzilla/DB/Schema.pm index a879684ea..9a156a1b0 100644 --- a/Bugzilla/DB/Schema.pm +++ b/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/checksetup.pl b/checksetup.pl index dcf6a30af..f93b3349a 100755 --- a/checksetup.pl +++ b/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/contrib/sendunsentbugmail.pl b/contrib/sendunsentbugmail.pl index 35b6a4941..9184e0be2 100644 --- a/contrib/sendunsentbugmail.pl +++ b/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/editproducts.cgi b/editproducts.cgi index ea4bc5e5b..de0c874e2 100755 --- a/editproducts.cgi +++ b/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/globals.pl b/globals.pl index b0a8feca8..6e0ebd774 100644 --- a/globals.pl +++ b/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/sanitycheck.cgi b/sanitycheck.cgi index 30a07be5b..2a51a3169 100755 --- a/sanitycheck.cgi +++ b/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"); -- cgit v1.2.3-24-g4f1b