Sha256: eb5c55ee7f70596ceefb5f2dfd23074e533be4fc4b801d92736ee7104adbf357
Contents?: true
Size: 1.38 KB
Versions: 8
Compression:
Stored size: 1.38 KB
Contents
module Neo4j module Core module QueryFindInBatches def find_in_batches(node_var, prop_var, options = {}) invalid_keys = options.keys.map(&:to_sym) - [:batch_size] fail ArgumentError, "Invalid keys: #{invalid_keys.join(', ')}" if not invalid_keys.empty? batch_size = options.delete(:batch_size) || 1000 query = reorder(node_var => prop_var).limit(batch_size) records = query.to_a while records.any? records_size = records.size primary_key_offset = begin records.last.send(node_var).send(prop_var) rescue NoMethodError begin records.last.send(node_var)[prop_var.to_sym] rescue NoMethodError records.last.send("#{node_var}.#{prop_var}") # In case we're explicitly returning it end end yield records break if records_size < batch_size records = query.where("#{node_var}.#{prop_var} > {primary_key_offset}").params(primary_key_offset: primary_key_offset).to_a end end def find_each(*args) find_in_batches(*args) do |batch| batch.each { |result| yield result } end end end end end
Version data entries
8 entries across 8 versions & 1 rubygems