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
? "\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};
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 #
############################
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,
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