summaryrefslogtreecommitdiff
path: root/lib/gitlab/pagination/keyset/iterator.rb
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-09-20 13:18:24 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-09-20 13:18:24 +0000
commit0653e08efd039a5905f3fa4f6e9cef9f5d2f799c (patch)
tree4dcc884cf6d81db44adae4aa99f8ec1233a41f55 /lib/gitlab/pagination/keyset/iterator.rb
parent744144d28e3e7fddc117924fef88de5d9674fe4c (diff)
downloadgitlab-ce-0653e08efd039a5905f3fa4f6e9cef9f5d2f799c.tar.gz
Add latest changes from gitlab-org/gitlab@14-3-stable-eev14.3.0-rc42
Diffstat (limited to 'lib/gitlab/pagination/keyset/iterator.rb')
-rw-r--r--lib/gitlab/pagination/keyset/iterator.rb21
1 files changed, 14 insertions, 7 deletions
diff --git a/lib/gitlab/pagination/keyset/iterator.rb b/lib/gitlab/pagination/keyset/iterator.rb
index c6f0014a0f4..14807fa37c4 100644
--- a/lib/gitlab/pagination/keyset/iterator.rb
+++ b/lib/gitlab/pagination/keyset/iterator.rb
@@ -6,12 +6,13 @@ module Gitlab
class Iterator
UnsupportedScopeOrder = Class.new(StandardError)
- def initialize(scope:, use_union_optimization: true)
+ def initialize(scope:, use_union_optimization: true, in_operator_optimization_options: nil)
@scope, success = Gitlab::Pagination::Keyset::SimpleOrderBuilder.build(scope)
raise(UnsupportedScopeOrder, 'The order on the scope does not support keyset pagination') unless success
@order = Gitlab::Pagination::Keyset::Order.extract_keyset_order_object(scope)
- @use_union_optimization = use_union_optimization
+ @use_union_optimization = in_operator_optimization_options ? false : use_union_optimization
+ @in_operator_optimization_options = in_operator_optimization_options
end
# rubocop: disable CodeReuse/ActiveRecord
@@ -19,11 +20,10 @@ module Gitlab
cursor_attributes = {}
loop do
- current_scope = scope.dup.limit(of)
- relation = order
- .apply_cursor_conditions(current_scope, cursor_attributes, { use_union_optimization: @use_union_optimization })
- .reorder(order)
- .limit(of)
+ current_scope = scope.dup
+ relation = order.apply_cursor_conditions(current_scope, cursor_attributes, keyset_options)
+ relation = relation.reorder(order) unless @in_operator_optimization_options
+ relation = relation.limit(of)
yield relation
@@ -38,6 +38,13 @@ module Gitlab
private
attr_reader :scope, :order
+
+ def keyset_options
+ {
+ use_union_optimization: @use_union_optimization,
+ in_operator_optimization_options: @in_operator_optimization_options
+ }
+ end
end
end
end