diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-09-20 13:18:24 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-09-20 13:18:24 +0000 |
commit | 0653e08efd039a5905f3fa4f6e9cef9f5d2f799c (patch) | |
tree | 4dcc884cf6d81db44adae4aa99f8ec1233a41f55 /lib/gitlab/pagination/keyset/iterator.rb | |
parent | 744144d28e3e7fddc117924fef88de5d9674fe4c (diff) | |
download | gitlab-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.rb | 21 |
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 |