Class: Gitlab::Pagination::Keyset::Iterator

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/pagination/keyset/iterator.rb

Instance Method Summary collapse

Constructor Details

#initialize(scope:, cursor: {}, use_union_optimization: true, in_operator_optimization_options: nil) ⇒ Iterator

Returns a new instance of Iterator.



7
8
9
10
11
12
13
14
15
# File 'lib/gitlab/pagination/keyset/iterator.rb', line 7

def initialize(scope:, cursor: {}, use_union_optimization: true, in_operator_optimization_options: nil)
  @scope, success = Gitlab::Pagination::Keyset::SimpleOrderBuilder.build(scope)
  raise(UnsupportedScopeOrder) unless success

  @cursor = cursor
  @order = Gitlab::Pagination::Keyset::Order.extract_keyset_order_object(@scope)
  @use_union_optimization = in_operator_optimization_options ? false : use_union_optimization
  @in_operator_optimization_options = in_operator_optimization_options
end

Instance Method Details

#each_batch(of: 1000) ⇒ Object

rubocop: disable CodeReuse/ActiveRecord



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/gitlab/pagination/keyset/iterator.rb', line 18

def each_batch(of: 1000)
  loop do
    current_scope = scope.dup
    relation = order.apply_cursor_conditions(current_scope, cursor, keyset_options)
    relation = relation.reorder(order) unless @in_operator_optimization_options
    relation = relation.limit(of)

    yield relation

    last_record = relation.last
    break unless last_record

    @cursor = order.cursor_attributes_for_node(last_record)
  end
end