From: gerv%gerv.net <> Date: Fri, 23 May 2003 05:55:52 +0000 (+0000) Subject: Bug 37749 - query for changes to specific field in last n days not working. Rearrange... X-Git-Tag: bugzilla-2.17.5~143 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=12a601d903aa0e9c63184f7ec2f0bb4f0dd04f6b;p=thirdparty%2Fbugzilla.git Bug 37749 - query for changes to specific field in last n days not working. Rearrange time-based query UI to be more sane. Patch by mailto:anthony@itia.ntua.gr; r=gerv. --- diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index 171a1b8245..45c26fdf26 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -213,64 +213,65 @@ sub init { } } - - if (defined $params->param('changedin')) { - my $c = trim($params->param('changedin')); - if ($c ne "") { - if ($c !~ /^[0-9]*$/) { - ThrowUserError("illegal_changed_in_last_x_days", - { value => $c }); - } - push(@specialchart, ["changedin", - "lessthan", $c + 1]); + # 2003-05-20: The 'changedin' field is no longer in the UI, but we continue + # to process it because it will appear in stored queries and bookmarks. + my $changedin = $params->param('changedin') || ''; + $changedin = trim($changedin); + if ($changedin) { + if ($changedin !~ /^[0-9]*$/) { + ThrowUserError("illegal_changed_in_last_x_days", + { value => $changedin }); } + push(@specialchart, ["changedin", "lessthan", $changedin + 1]); } + my $chfieldfrom = $params->param('chfieldfrom') || ''; + my $chfieldto = $params->param('chfieldto') || ''; my @chfield = $params->param('chfield'); - - if (@chfield) { - my $which = lsearch(\@chfield, "[Bug creation]"); - if ($which >= 0) { - splice(@chfield, $which, 1); - push(@specialchart, ["creation_ts", "greaterthan", - SqlifyDate($params->param('chfieldfrom'))]); - my $to = $params->param('chfieldto'); - if (defined $to) { - $to = trim($to); - if ($to ne "" && $to !~ /^now$/i) { - push(@specialchart, ["creation_ts", "lessthan", - SqlifyDate($to)]); + my $chvalue = $params->param('chfieldvalue') || ''; + my $lcchfieldfrom = trim(lc($chfieldfrom)); + my $lcchfieldto = trim(lc($chfieldto)); + $chvalue = trim($chvalue); + + $lcchfieldfrom = '' if ($lcchfieldfrom eq 'now'); + $lcchfieldto = '' if ($lcchfieldto eq 'now'); + if ($lcchfieldfrom ne '' || $lcchfieldto ne '') { + my $sql_chfrom = $lcchfieldfrom ? &::SqlQuote(SqlifyDate($lcchfieldfrom)):''; + my $sql_chto = $lcchfieldto ? &::SqlQuote(SqlifyDate($lcchfieldto)) :''; + my $sql_chvalue = $chvalue ne '' ? &::SqlQuote($chvalue) : ''; + if(!@chfield) { + push(@wherepart, "bugs.delta_ts >= $sql_chfrom") if ($sql_chfrom); + push(@wherepart, "bugs.delta_ts <= $sql_chto") if ($sql_chto); + } else { + push(@supptables, "bugs_activity actcheck"); + my $sql_bugschanged = ''; + my @list; + foreach my $f (@chfield) { + if ($f eq "[Bug creation]") { + my @l; + push(@l, "creation_ts >= $sql_chfrom") if($sql_chfrom); + push(@l, "creation_ts <= $sql_chto") if($sql_chto); + $sql_bugschanged = "(" . join(' AND ', @l) . ")"; + } else { + push(@list, "\nactcheck.fieldid = " . &::GetFieldID($f)); } } - } - } - - if (@chfield) { - push(@supptables, "bugs_activity actcheck"); - - my @list; - foreach my $f (@chfield) { - push(@list, "\nactcheck.fieldid = " . &::GetFieldID($f)); - } - push(@wherepart, "actcheck.bug_id = bugs.bug_id"); - push(@wherepart, "(" . join(' OR ', @list) . ")"); - push(@wherepart, "actcheck.bug_when >= " . - &::SqlQuote(SqlifyDate($params->param('chfieldfrom')))); - my $to = $params->param('chfieldto'); - if (defined $to) { - $to = trim($to); - if ($to ne "" && $to !~ /^now$/i) { - push(@wherepart, "actcheck.bug_when <= " . - &::SqlQuote(SqlifyDate($to))); - } - } - my $value = $params->param('chfieldvalue'); - if (defined $value) { - $value = trim($value); - if ($value ne "") { - push(@wherepart, "actcheck.added = " . - &::SqlQuote($value)) + if(@list) { + $sql_bugschanged .= ' OR ' if($sql_bugschanged ne ''); + $sql_bugschanged .= "(actcheck.bug_id = bugs.bug_id AND " . + "(" . join(' OR ', @list) . ")"; + if($sql_chfrom) { + $sql_bugschanged .= " AND actcheck.bug_when >= $sql_chfrom"; + } + if($sql_chto) { + $sql_bugschanged .= " AND actcheck.bug_when <= $sql_chto"; + } + if($sql_chvalue) { + $sql_bugschanged .= " AND actcheck.added = $sql_chvalue"; + } + $sql_bugschanged .= ')'; } + push(@wherepart, "($sql_bugschanged)"); } } diff --git a/queryhelp.cgi b/queryhelp.cgi index a4aff1d07b..a0e1178aa7 100755 --- a/queryhelp.cgi +++ b/queryhelp.cgi @@ -800,28 +800,51 @@ bugs numbered: +
Changed in the last [text] days - -
Lets you specify how many days ago - at maximum - a bug could have changed state. -
At least [text] votes
With this, you can choose how many votes - at minimum - a bug has. -
Where the field(s) [fields] changed to [text]
+
+ Only bugs changed between With this, you can specify values to search for in fields that exist in the bug If you choose
-one or more fields, you have to fill out one of the fields to the right. It might
-be difficult to figure out what these fields mean if you are a newbie to the query.
-They match various fields within the bug information. Optionally, you can
-also enter what value you want the field to have changed to if you only entered one field.
-For instance, if the bug changed who it was assigned to from jon\@netscape.com
-to brian\@netscape.com , you could enter in
-assigned_to changed to brian\@netscape.com.
+ Here you can choose what dates the bugs changed. "Now" can be used as an
+entry. Other entries should be in yyyy-mm-dd format, or in relative dates such
+as 1d or 2w or 3m or 4y, which respectively mean 1 day, 2 weeks, 3 months, 4
+years ago. 0d is last midnight, and 0w, 0m, 0y is the beginning of this week,
+month, or year. During dates [text] to [text]
+ Where one or more of the following changed, and the result was Here, you can choose what dates the fields changed. "Now" can be used as an entry. Other entries should be in
-mm/dd/yyyy or yyyy-mm-dd format.
+ With this you can specify which bug fields changed, and optionally to what
+value, between the dates specified above. Leaving blank will match any change.
-
-
-
-
-
(YYYY-MM-DD or relative dates)
+
+
(YYYY-MM-DD)
-
+