Class: Gitlab::Pagination::Keyset::Iterator
- Inherits:
-
Object
- Object
- Gitlab::Pagination::Keyset::Iterator
- Defined in:
- lib/gitlab/pagination/keyset/iterator.rb
Instance Method Summary collapse
-
#each_batch(of: 1000) ⇒ Object
rubocop: disable CodeReuse/ActiveRecord.
-
#initialize(scope:, cursor: {}, use_union_optimization: true, in_operator_optimization_options: nil) ⇒ Iterator
constructor
A new instance of Iterator.
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 = ? false : use_union_optimization @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, ) 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 |