summaryrefslogtreecommitdiffstats
path: root/Bugzilla
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla')
-rw-r--r--Bugzilla/Search.pm32
1 files changed, 31 insertions, 1 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 #
############################