module Mongo::Operation::Write

Shared behavior of operations that write (update, insert, delete).

@since 2.5.2 @api private

Public Instance Methods

bulk_execute(connection, client:) click to toggle source

Execute the bulk write operation.

@example

operation.bulk_execute(connection, client: nil)

@param [ Mongo::Server::Connection ] connection The connection over

which to send the operation.

@param [ Mongo::Client ] client The client that will be used to

perform auto-encryption if it is necessary to encrypt the command
being executed (optional).

@return [ Mongo::Operation::Delete::BulkResult,

Mongo::Operation::Insert::BulkResult,
Mongo::Operation::Update::BulkResult ] The bulk result.

@since 2.5.2

# File lib/mongo/operation/shared/write.rb, line 71
def bulk_execute(connection, client:)
  Lint.assert_type(connection, Server::Connection)

  if connection.features.op_msg_enabled?
    self.class::OpMsg.new(spec).execute(connection, client: client).bulk_result
  else
    self.class::Command.new(spec).execute(connection, client: client).bulk_result
  end
end
execute(server, client:) click to toggle source

Execute the operation.

@example

operation.execute(server, client: nil)

@param [ Mongo::Server ] server The server to send the operation to. @param [ Mongo::Client ] client The client that will be used to

perform auto-encryption if it is necessary to encrypt the command
being executed (optional).

@return [ Mongo::Operation::Result ] The operation result.

@since 2.5.2

# File lib/mongo/operation/shared/write.rb, line 39
def execute(server, client:)
  server.with_connection do |connection|
    validate!(connection)
    op = if connection.features.op_msg_enabled?
        self.class::OpMsg.new(spec)
      elsif !acknowledged_write?
        self.class::Legacy.new(spec)
      else
        self.class::Command.new(spec)
      end

    result = op.execute(connection, client: client)
    validate_result(result, client, connection)
  end
end

Private Instance Methods

validate!(connection) click to toggle source
# File lib/mongo/operation/shared/write.rb, line 83
def validate!(connection)
  if !acknowledged_write?
    if collation
      raise Error::UnsupportedCollation.new(
          Error::UnsupportedCollation::UNACKNOWLEDGED_WRITES_MESSAGE)
    end
    if array_filters(connection)
      raise Error::UnsupportedArrayFilters.new(
          Error::UnsupportedArrayFilters::UNACKNOWLEDGED_WRITES_MESSAGE)
    end
  end
end