summaryrefslogtreecommitdiff
path: root/lib/gitlab/pagination/offset_pagination.rb
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-07-20 09:55:51 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-07-20 09:55:51 +0000
commite8d2c2579383897a1dd7f9debd359abe8ae8373d (patch)
treec42be41678c2586d49a75cabce89322082698334 /lib/gitlab/pagination/offset_pagination.rb
parentfc845b37ec3a90aaa719975f607740c22ba6a113 (diff)
downloadgitlab-ce-e8d2c2579383897a1dd7f9debd359abe8ae8373d.tar.gz
Add latest changes from gitlab-org/gitlab@14-1-stable-eev14.1.0-rc42
Diffstat (limited to 'lib/gitlab/pagination/offset_pagination.rb')
-rw-r--r--lib/gitlab/pagination/offset_pagination.rb15
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/gitlab/pagination/offset_pagination.rb b/lib/gitlab/pagination/offset_pagination.rb
index 2805b12d95d..4f8a6ffb2cc 100644
--- a/lib/gitlab/pagination/offset_pagination.rb
+++ b/lib/gitlab/pagination/offset_pagination.rb
@@ -19,11 +19,10 @@ module Gitlab
private
def paginate_with_limit_optimization(relation)
- # do not paginate relation if it is already paginated
- pagination_data = if relation.respond_to?(:current_page) && relation.current_page == params[:page] && relation.limit_value == params[:per_page]
- relation
- else
+ pagination_data = if needs_pagination?(relation)
relation.page(params[:page]).per(params[:per_page])
+ else
+ relation
end
return pagination_data unless pagination_data.is_a?(ActiveRecord::Relation)
@@ -39,6 +38,14 @@ module Gitlab
end
end
+ def needs_pagination?(relation)
+ return true unless relation.respond_to?(:current_page)
+ return true if params[:page].present? && relation.current_page != params[:page].to_i
+ return true if params[:per_page].present? && relation.limit_value != params[:per_page].to_i
+
+ false
+ end
+
def add_default_order(relation)
if relation.is_a?(ActiveRecord::Relation) && relation.order_values.empty?
relation = relation.order(:id) # rubocop: disable CodeReuse/ActiveRecord