// protected methods /// <inheritdoc /> protected override BsonDocument CreateCommand(ConnectionDescription connectionDescription, int attempt, long?transactionNumber) { var serverVersion = connectionDescription.ServerVersion; if (!Feature.Collation.IsSupported(serverVersion)) { if (_updates.Items.Skip(_updates.Offset).Take(_updates.Count).Any(u => u.Collation != null)) { throw new NotSupportedException($"Server version {serverVersion} does not support collations."); } } if (!Feature.ArrayFilters.IsSupported(serverVersion)) { if (_updates.Items.Skip(_updates.Offset).Take(_updates.Count).Any(u => u.ArrayFilters != null)) { throw new NotSupportedException($"Server version {serverVersion} does not support arrayFilters."); } } return(new BsonDocument { { "update", _collectionNamespace.CollectionName }, { "ordered", IsOrdered }, { "bypassDocumentValidation", () => _bypassDocumentValidation.Value, _bypassDocumentValidation.HasValue }, { "writeConcern", () => WriteConcern.ToBsonDocument(), WriteConcern != null && !WriteConcern.IsServerDefault }, { "txnNumber", () => transactionNumber.Value, transactionNumber.HasValue } }); }
public void CreateCommand_should_return_expected_result_when_WriteConcern_is_set( [Values(1, 2)] int w) { var requests = new[] { new CreateIndexRequest(new BsonDocument("x", 1)) }; var writeConcern = new WriteConcern(w); var subject = new CreateIndexesUsingCommandOperation(_collectionNamespace, requests, _messageEncoderSettings) { WriteConcern = writeConcern }; var session = OperationTestHelper.CreateSession(); var connectionDescription = OperationTestHelper.CreateConnectionDescription(); var result = subject.CreateCommand(session, connectionDescription); var expectedResult = new BsonDocument { { "createIndexes", _collectionNamespace.CollectionName }, { "indexes", new BsonArray { requests[0].CreateIndexDocument() } }, { "writeConcern", writeConcern.ToBsonDocument() } }; result.Should().Be(expectedResult); }
public void CreateCommand_should_return_expected_result_when_WriteConcern_is_set( [Values(1, 2)] int w, [Values(false, true)] bool isWriteConcernSupported) { var requests = new[] { new CreateIndexRequest(new BsonDocument("x", 1)) }; var writeConcern = new WriteConcern(w); var subject = new CreateIndexesUsingCommandOperation(_collectionNamespace, requests, _messageEncoderSettings) { WriteConcern = writeConcern }; var session = OperationTestHelper.CreateSession(); var connectionDescription = OperationTestHelper.CreateConnectionDescription(serverVersion: Feature.CommandsThatWriteAcceptWriteConcern.SupportedOrNotSupportedVersion(isWriteConcernSupported)); var result = subject.CreateCommand(session, connectionDescription); var expectedResult = new BsonDocument { { "createIndexes", _collectionNamespace.CollectionName }, { "indexes", new BsonArray { requests[0].CreateIndexDocument(null) } }, { "writeConcern", () => writeConcern.ToBsonDocument(), isWriteConcernSupported } }; result.Should().Be(expectedResult); }
// private methods internal BsonDocument CreateCommand(SemanticVersion serverVersion) { return(new BsonDocument { { "dropDatabase", 1 }, { "writeConcern", () => _writeConcern.ToBsonDocument(), Feature.CommandsThatWriteAcceptWriteConcern.ShouldSendWriteConcern(serverVersion, _writeConcern) } }); }
// private methods private BsonDocument CreateCommand() { return(new BsonDocument { { CommandName, 1 }, { "writeConcern", () => _writeConcern.ToBsonDocument(), !_writeConcern.IsServerDefault } }); }
// private methods internal BsonDocument CreateCommand(SemanticVersion serverVersion) { return(new BsonDocument { { "reIndex", _collectionNamespace.CollectionName }, { "writeConcern", () => _writeConcern.ToBsonDocument(), Feature.CommandsThatWriteAcceptWriteConcern.ShouldSendWriteConcern(serverVersion, _writeConcern) } }); }
// private methods internal BsonDocument CreateCommand(SemanticVersion serverVersion) { return(new BsonDocument { { "createIndexes", _collectionNamespace.CollectionName }, { "indexes", new BsonArray(_requests.Select(request => request.CreateIndexDocument(serverVersion))) }, { "writeConcern", () => _writeConcern.ToBsonDocument(), Feature.CommandsThatWriteAcceptWriteConcern.ShouldSendWriteConcern(serverVersion, _writeConcern) } }); }
public static BsonDocument GetWriteConcernForWriteCommand(ICoreSession session, WriteConcern writeConcern) { if (!session.IsInTransaction && writeConcern != null && !writeConcern.IsServerDefault) { return(writeConcern.ToBsonDocument()); } return(null); }
public static BsonDocument GetWriteConcernForCommand(ICoreSession session, WriteConcern writeConcern, SemanticVersion serverVersion, Feature requiredFeature) { if (!session.IsInTransaction && writeConcern != null && !writeConcern.IsServerDefault && requiredFeature.IsSupported(serverVersion)) { return(writeConcern.ToBsonDocument()); } return(null); }
// protected methods /// <summary> /// Creates the command for the operation. /// </summary> /// <returns>The command.</returns> protected virtual BsonDocument CreateCommand() { return(new BsonDocument { { CommandName, 1 }, { "writeConcern", () => _writeConcern.ToBsonDocument(), !_writeConcern.IsServerDefault }, { "recoveryToken", _recoveryToken, _recoveryToken != null } }); }
// methods internal BsonDocument CreateCommand(SemanticVersion serverVersion) { return(new BsonDocument { { "dropIndexes", _collectionNamespace.CollectionName }, { "index", _indexName }, { "maxTimeMS", () => MaxTimeHelper.ToMaxTimeMS(_maxTime.Value), _maxTime.HasValue }, { "writeConcern", () => _writeConcern.ToBsonDocument(), Feature.CommandsThatWriteAcceptWriteConcern.ShouldSendWriteConcern(serverVersion, _writeConcern) } }); }
// methods internal BsonDocument CreateCommand(SemanticVersion serverVersion) { return(new BsonDocument { { "renameCollection", _collectionNamespace.FullName }, { "to", _newCollectionNamespace.FullName }, { "dropTarget", () => _dropTarget.Value, _dropTarget.HasValue }, { "writeConcern", () => _writeConcern.ToBsonDocument(), Feature.CommandsThatWriteAcceptWriteConcern.ShouldSendWriteConcern(serverVersion, _writeConcern) } }); }
// protected methods /// <inheritdoc /> protected override BsonDocument CreateCommand(ConnectionDescription connectionDescription, int attempt, long?transactionNumber) { return(new BsonDocument { { "insert", _collectionNamespace.CollectionName }, { "ordered", IsOrdered }, { "bypassDocumentValidation", () => _bypassDocumentValidation, _bypassDocumentValidation.HasValue }, { "writeConcern", () => WriteConcern.ToBsonDocument(), WriteConcern != null && !WriteConcern.IsServerDefault }, { "txnNumber", () => transactionNumber.Value, transactionNumber.HasValue } }); }
// methods internal override BsonDocument CreateCommand(SemanticVersion serverVersion) { return(new BsonDocument { { "findAndModify", CollectionNamespace.CollectionName }, { "query", _filter }, { "sort", _sort, _sort != null }, { "remove", true }, { "fields", _projection, _projection != null }, { "maxTimeMS", () => _maxTime.Value.TotalMilliseconds, _maxTime.HasValue }, { "writeConcern", () => WriteConcern.ToBsonDocument(), WriteConcern != null && !WriteConcern.IsServerDefault && SupportedFeatures.IsFindAndModifyWriteConcernSupported(serverVersion) } }); }
// methods /// <inheritdoc/> protected internal override BsonDocument CreateCommand(ConnectionDescription connectionDescription, ICoreSession session) { var command = base.CreateCommand(connectionDescription, session); if (_bypassDocumentValidation.HasValue && Feature.BypassDocumentValidation.IsSupported(connectionDescription.ServerVersion)) { command["bypassDocumentValidation"] = _bypassDocumentValidation.Value; } if (Feature.CommandsThatWriteAcceptWriteConcern.ShouldSendWriteConcern(connectionDescription.ServerVersion, _writeConcern)) { command["writeConcern"] = _writeConcern.ToBsonDocument(); } return(command); }
// private methods internal BsonDocument CreateCommand(SemanticVersion serverVersion) { Feature.Views.ThrowIfNotSupported(serverVersion); Feature.Collation.ThrowIfNotSupported(serverVersion, _collation); return(new BsonDocument { { "create", _viewName }, { "viewOn", _viewOn }, { "pipeline", new BsonArray(_pipeline) }, { "collation", () => _collation.ToBsonDocument(), _collation != null }, { "writeConcern", () => _writeConcern.ToBsonDocument(), Feature.CommandsThatWriteAcceptWriteConcern.ShouldSendWriteConcern(serverVersion, _writeConcern) } }); }
internal BsonDocument CreateCommand(SemanticVersion serverVersion) { Feature.Collation.ThrowIfNotSupported(serverVersion, _collation); return(new BsonDocument { { "aggregate", _collectionNamespace.CollectionName }, { "pipeline", new BsonArray(_pipeline) }, { "allowDiskUse", () => _allowDiskUse.Value, _allowDiskUse.HasValue }, { "bypassDocumentValidation", () => _bypassDocumentValidation.Value, _bypassDocumentValidation.HasValue&& Feature.BypassDocumentValidation.IsSupported(serverVersion) }, { "maxTimeMS", () => _maxTime.Value.TotalMilliseconds, _maxTime.HasValue }, { "collation", () => _collation.ToBsonDocument(), _collation != null }, { "writeConcern", () => _writeConcern.ToBsonDocument(), Feature.CommandsThatWriteAcceptWriteConcern.ShouldSendWriteConcern(serverVersion, _writeConcern) } }); }
// methods internal override BsonDocument CreateCommand(SemanticVersion serverVersion) { return(new BsonDocument { { "findAndModify", CollectionNamespace.CollectionName }, { "query", _filter }, { "sort", _sort, _sort != null }, { "update", _update }, { "new", _returnDocument == ReturnDocument.After }, { "fields", _projection, _projection != null }, { "upsert", _isUpsert }, { "maxTimeMS", () => _maxTime.Value.TotalMilliseconds, _maxTime.HasValue }, { "writeConcern", () => WriteConcern.ToBsonDocument(), WriteConcern != null && !WriteConcern.IsServerDefault && SupportedFeatures.IsFindAndModifyWriteConcernSupported(serverVersion) }, { "bypassDocumentValidation", () => _bypassDocumentValidation.Value, _bypassDocumentValidation.HasValue&& SupportedFeatures.IsBypassDocumentValidationSupported(serverVersion) } }); }
// methods internal override BsonDocument CreateCommand(SemanticVersion serverVersion, long?transactionNumber) { Feature.Collation.ThrowIfNotSupported(serverVersion, Collation); return(new BsonDocument { { "findAndModify", CollectionNamespace.CollectionName }, { "query", _filter }, { "remove", true }, { "sort", _sort, _sort != null }, { "fields", _projection, _projection != null }, { "maxTimeMS", () => MaxTimeHelper.ToMaxTimeMS(_maxTime.Value), _maxTime.HasValue }, { "writeConcern", () => WriteConcern.ToBsonDocument(), WriteConcern != null && !WriteConcern.IsServerDefault && Feature.FindAndModifyWriteConcern.IsSupported(serverVersion) }, { "collation", () => Collation.ToBsonDocument(), Collation != null }, { "txnNumber", () => transactionNumber, transactionNumber.HasValue } }); }
// protected methods /// <inheritdoc /> protected override BsonDocument CreateCommand(ConnectionDescription connectionDescription, int attempt, long?transactionNumber) { if (!Feature.Collation.IsSupported(connectionDescription.ServerVersion)) { if (_deletes.Items.Skip(_deletes.Offset).Take(_deletes.Count).Any(d => d.Collation != null)) { throw new NotSupportedException($"Server version {connectionDescription.ServerVersion} does not support collations."); } } return(new BsonDocument { { "delete", _collectionNamespace.CollectionName }, { "ordered", IsOrdered }, { "writeConcern", () => WriteConcern.ToBsonDocument(), WriteConcern != null && !WriteConcern.IsServerDefault }, { "txnNumber", () => transactionNumber.Value, transactionNumber.HasValue } }); }
// methods internal override BsonDocument CreateCommand(SemanticVersion serverVersion, long?transactionNumber) { Feature.Collation.ThrowIfNotSupported(serverVersion, Collation); return(new BsonDocument { { "findAndModify", CollectionNamespace.CollectionName }, { "query", _filter }, { "update", _replacement }, { "new", true, _returnDocument == ReturnDocument.After }, { "sort", _sort, _sort != null }, { "fields", _projection, _projection != null }, { "upsert", true, _isUpsert }, { "maxTimeMS", () => _maxTime.Value.TotalMilliseconds, _maxTime.HasValue }, { "writeConcern", () => WriteConcern.ToBsonDocument(), WriteConcern != null && !WriteConcern.IsServerDefault && Feature.FindAndModifyWriteConcern.IsSupported(serverVersion) }, { "bypassDocumentValidation", () => _bypassDocumentValidation.Value, _bypassDocumentValidation.HasValue&& Feature.BypassDocumentValidation.IsSupported(serverVersion) }, { "collation", () => Collation.ToBsonDocument(), Collation != null }, { "txnNumber", () => transactionNumber, transactionNumber.HasValue } }); }
// methods internal BsonDocument CreateCommand(SemanticVersion serverVersion) { Feature.Collation.ThrowIfNotSupported(serverVersion, _collation); return(new BsonDocument { { "create", _collectionNamespace.CollectionName }, { "capped", () => _capped.Value, _capped.HasValue }, { "autoIndexId", () => _autoIndexId.Value, _autoIndexId.HasValue }, { "size", () => _maxSize.Value, _maxSize.HasValue }, { "max", () => _maxDocuments.Value, _maxDocuments.HasValue }, { "flags", () => _usePowerOf2Sizes.Value ? 1 : 0, _usePowerOf2Sizes.HasValue }, { "storageEngine", () => _storageEngine, _storageEngine != null }, { "indexOptionDefaults", _indexOptionDefaults, _indexOptionDefaults != null }, { "validator", _validator, _validator != null }, { "validationAction", () => _validationAction.Value.ToString().ToLowerInvariant(), _validationAction.HasValue }, { "validationLevel", () => _validationLevel.Value.ToString().ToLowerInvariant(), _validationLevel.HasValue }, { "collation", () => _collation.ToBsonDocument(), _collation != null }, { "writeConcern", () => _writeConcern.ToBsonDocument(), Feature.CommandsThatWriteAcceptWriteConcern.ShouldSendWriteConcern(serverVersion, _writeConcern) } }); }
private BsonDocument CreateWriteCommand(BatchSerializer batchSerializer, BatchableSource <WriteRequest> requestSource, SemanticVersion serverVersion) { var batchWrapper = new BsonDocumentWrapper(requestSource, batchSerializer); WriteConcern effectiveWriteConcern = _writeConcern; if (!effectiveWriteConcern.IsAcknowledged && _isOrdered) { effectiveWriteConcern = WriteConcern.W1; // ignore the server's default, whatever it may be. } return(new BsonDocument { { CommandName, _collectionNamespace.CollectionName }, { "writeConcern", () => effectiveWriteConcern.ToBsonDocument(), !effectiveWriteConcern.IsServerDefault }, { "ordered", _isOrdered }, { "bypassDocumentValidation", () => _bypassDocumentValidation.Value, _bypassDocumentValidation.HasValue&& Feature.BypassDocumentValidation.IsSupported(serverVersion) }, { RequestsElementName, new BsonArray { batchWrapper } } // should be last }); }