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

Version Path
neo4j-core-4.0.7 lib/neo4j-core/query_find_in_batches.rb
neo4j-core-4.0.6 lib/neo4j-core/query_find_in_batches.rb
neo4j-core-4.0.5 lib/neo4j-core/query_find_in_batches.rb
neo4j-core-4.0.4 lib/neo4j-core/query_find_in_batches.rb
neo4j-core-4.0.3 lib/neo4j-core/query_find_in_batches.rb
neo4j-core-4.0.2 lib/neo4j-core/query_find_in_batches.rb
neo4j-core-4.0.1 lib/neo4j-core/query_find_in_batches.rb
neo4j-core-4.0.0 lib/neo4j-core/query_find_in_batches.rb