diff options
-rw-r--r-- | Bugzilla/Search.pm | 32 | ||||
-rwxr-xr-x | buglist.cgi | 16 |
2 files changed, 35 insertions, 13 deletions
diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index 2220abf1e..224193fbc 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -56,6 +56,7 @@ use Data::Dumper; use Date::Format; use Date::Parse; use List::MoreUtils qw(all part uniq); +use POSIX qw(INT_MAX); use Storable qw(dclone); # Description Of Boolean Charts @@ -718,12 +719,14 @@ sub sql { ? "\nHAVING " . join(' AND ', @$having_terms) : ''; my $order_by = $self->_sql_order_by ? "\nORDER BY " . join(', ', $self->_sql_order_by) : ''; + my $limit = $self->_sql_limit; + $limit = "\n$limit" if $limit; my $query = <<END; SELECT $select FROM $from WHERE $where -$group_by$having$order_by +$group_by$having$order_by$limit END $self->{sql} = $query; return $self->{sql}; @@ -918,6 +921,33 @@ sub _translate_order_by_column { return @items; } +############################# +# Internal Accessors: LIMIT # +############################# + +sub _sql_limit { + my ($self) = @_; + my $limit = $self->_params->{limit}; + my $offset = $self->_params->{offset}; + if (defined $offset and not defined $limit) { + $limit = INT_MAX; + } + if (defined $limit) { + detaint_natural($limit) + || ThrowCodeError('param_must_be_numeric', + { function => 'Bugzilla::Search::new', + param => 'limit' }); + if (defined $offset) { + detaint_natural($offset) + || ThrowCodeError('param_must_be_numeric', + { function => 'Bugzilla::Search::new', + param => 'offset' }); + } + return Bugzilla->dbh->sql_limit($limit, $offset); + } + return ''; +} + ############################ # Internal Accessors: FROM # ############################ diff --git a/buglist.cgi b/buglist.cgi index 3fe2ce39e..4b7fe8f5a 100755 --- a/buglist.cgi +++ b/buglist.cgi @@ -772,6 +772,10 @@ if (!$order) { my @orderstrings = split(/,\s*/, $order); +if ($fulltext and grep { /^relevance/ } @orderstrings) { + $vars->{'message'} = 'buglist_sorted_by_relevance' +} + # Generate the basic SQL query that will be used to generate the bug list. my $search = new Bugzilla::Search('fields' => \@selectcolumns, 'params' => scalar $params->Vars, @@ -779,18 +783,6 @@ my $search = new Bugzilla::Search('fields' => \@selectcolumns, my $query = $search->sql; $vars->{'search_description'} = $search->search_description; -if (defined $cgi->param('limit')) { - my $limit = $cgi->param('limit'); - if (detaint_natural($limit)) { - $query .= " " . $dbh->sql_limit($limit); - } -} -elsif ($fulltext) { - if ($cgi->param('order') && $cgi->param('order') =~ /^relevance/) { - $vars->{'message'} = 'buglist_sorted_by_relevance'; - } -} - ################################################################################ # Query Execution |