class Mongo::BulkWrite::ResultCombiner
Combines bulk write results together.
@api private
@since 2.1.0
Attributes
count[R]
@return [ Integer ] count The number of documents in the entire batch.
results[R]
@return [ Hash ] results The results hash.
Public Class Methods
new()
click to toggle source
Create the new result combiner.
@api private
@example Create the result combiner.
ResultCombiner.new
@since 2.1.0
# File lib/mongo/bulk_write/result_combiner.rb, line 39 def initialize @results = {} @count = 0 end
Public Instance Methods
combine!(result, count)
click to toggle source
Adds a result to the overall results.
@api private
@example Add the result.
combiner.combine!(result, count)
@param [ Operation::Result
] result The result to combine. @param [ Integer ] count The count of requests in the batch.
@since 2.1.0
# File lib/mongo/bulk_write/result_combiner.rb, line 55 def combine!(result, count) # Errors can be communicated by the server in a variety of fields: # writeError, writeErrors, writeConcernError, writeConcernErrors. # Currently only errors given in writeConcernErrors will cause # counts not to be added, because this behavior is covered by the # retryable writes tests. It is possible that some or all of the # other errors should also be excluded when combining counts and # ids, and it is also possible that only a subset of these error # fields is actually possible in the context of bulk writes. unless result.write_concern_error? combine_counts!(result) combine_ids!(result) end combine_errors!(result) @count += count end
result()
click to toggle source
Get the final result.
@api private
@example Get the final result.
combinator.result
@return [ BulkWrite::Result
] The final result.
@since 2.1.0
# File lib/mongo/bulk_write/result_combiner.rb, line 82 def result BulkWrite::Result.new(results).validate! end
Private Instance Methods
combine_counts!(result)
click to toggle source
# File lib/mongo/bulk_write/result_combiner.rb, line 88 def combine_counts!(result) Result::FIELDS.each do |field| if result.respond_to?(field) && value = result.send(field) results.merge!(field => (results[field] || 0) + value) end end end
combine_errors!(result)
click to toggle source
# File lib/mongo/bulk_write/result_combiner.rb, line 107 def combine_errors!(result) combine_write_errors!(result) combine_write_concern_errors!(result) end
combine_ids!(result)
click to toggle source
# File lib/mongo/bulk_write/result_combiner.rb, line 96 def combine_ids!(result) if result.respond_to?(Result::INSERTED_IDS) results[Result::INSERTED_IDS] = (results[Result::INSERTED_IDS] || []) + result.inserted_ids end if result.respond_to?(Result::UPSERTED) results[Result::UPSERTED_IDS] = (results[Result::UPSERTED_IDS] || []) + result.upserted.map{ |doc| doc['_id'] } end end
combine_write_concern_errors!(result)
click to toggle source
# File lib/mongo/bulk_write/result_combiner.rb, line 122 def combine_write_concern_errors!(result) if write_concern_errors = result.aggregate_write_concern_errors(count) results['writeConcernErrors'] = (results['writeConcernErrors'] || []) + write_concern_errors end end
combine_write_errors!(result)
click to toggle source
# File lib/mongo/bulk_write/result_combiner.rb, line 112 def combine_write_errors!(result) if write_errors = result.aggregate_write_errors(count) results.merge!( 'writeErrors' => ((results['writeErrors'] || []) << write_errors).flatten ) else result.validate! end end