upsert method

Future<MutationResult> upsert(
  1. String key,
  2. Object? value, [
  3. UpsertOptions? options
])

Upserts a document into the collection.

This operation succeeds whether or not the document already exists.

Implementation

Future<MutationResult> upsert(
  String key,
  Object? value, [
  UpsertOptions? options,
]) async {
  options ??= const UpsertOptions();
  final id = _documentId(key);
  final expiry = options.expiry ?? Duration.zero;
  final timeout = _mutationTimeout(options);
  final encodedData = _encodeDocument(options, value);

  final response = options.usesLegacyDurability
      ? await _connection.upsertWithLegacyDurability(
          UpsertWithLegacyDurability(
            id: id,
            value: encodedData.bytes,
            flags: encodedData.flags,
            expiry: expiry.inSeconds,
            preserveExpiry: options.preserveExpiry,
            timeout: timeout,
            persistTo: options.durabilityPersistTo,
            replicateTo: options.durabilityReplicateTo,
            partition: 0,
            opaque: 0,
          ),
        )
      : await _connection.upsert(
          UpsertRequest(
            id: id,
            value: encodedData.bytes,
            flags: encodedData.flags,
            expiry: expiry.inSeconds,
            preserveExpiry: options.preserveExpiry,
            timeout: timeout,
            durabilityLevel: options.durabilityLevel,
            partition: 0,
            opaque: 0,
          ),
        );

  return MutationResult(
    cas: response.cas,
    token: response.token,
  );
}