Skip to content

Commit

Permalink
CSHARP-1912: And with one or more empty clauses rendering incorrectly.
Browse files Browse the repository at this point in the history
  • Loading branch information
rstam committed Feb 13, 2017
1 parent 21e8768 commit 5045d42
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 5 deletions.
10 changes: 5 additions & 5 deletions src/MongoDB.Driver/FilterDefinitionBuilder.cs
Expand Up @@ -1492,6 +1492,11 @@ public AndFilterDefinition(IEnumerable<FilterDefinition<TDocument>> filters)

public override BsonDocument Render(IBsonSerializer<TDocument> documentSerializer, IBsonSerializerRegistry serializerRegistry)
{
if (_filters.Count == 0)
{
return new BsonDocument("$and", new BsonArray(0));
}

var document = new BsonDocument();

foreach (var filter in _filters)
Expand All @@ -1503,11 +1508,6 @@ public override BsonDocument Render(IBsonSerializer<TDocument> documentSerialize
}
}

if (document.ElementCount == 0)
{
document = new BsonDocument("$and", new BsonArray(0));
}

return document;
}

Expand Down
44 changes: 44 additions & 0 deletions tests/MongoDB.Driver.Tests/FilterDefinitionBuilderTests.cs
Expand Up @@ -141,6 +141,28 @@ public void And_with_no_clauses()
Assert(filter, "{ $and : [] }");
}

[Fact]
public void And_with_one_empty_clause()
{
var subject = CreateSubject<BsonDocument>();
var empty = Builders<BsonDocument>.Filter.Empty;

var filter = subject.And(empty);

Assert(filter, "{ }");
}

[Fact]
public void And_with_two_empty_clauses()
{
var subject = CreateSubject<BsonDocument>();
var empty = Builders<BsonDocument>.Filter.Empty;

var filter = subject.And(empty, empty);

Assert(filter, "{ }");
}

[Fact]
public void BitsAllClear()
{
Expand Down Expand Up @@ -904,6 +926,28 @@ public void Or_with_no_clauses()
Assert(filter, "{ $or : [] }");
}

[Fact]
public void Or_with_one_empty_clause()
{
var subject = CreateSubject<BsonDocument>();
var empty = Builders<BsonDocument>.Filter.Empty;

var filter = subject.Or(empty);

Assert(filter, "{ $or : [{}] }");
}

[Fact]
public void Or_with_two_empty_clauses()
{
var subject = CreateSubject<BsonDocument>();
var empty = Builders<BsonDocument>.Filter.Empty;

var filter = subject.Or(empty, empty);

Assert(filter, "{ $or : [{}, {}] }");
}

[Fact]
public void Nor_with_no_clauses()
{
Expand Down

0 comments on commit 5045d42

Please sign in to comment.