aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla/Search.pm32
-rwxr-xr-xbuglist.cgi16
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