Skip to content

Commit 5045d42

Browse files
committed
CSHARP-1912: And with one or more empty clauses rendering incorrectly.
1 parent 21e8768 commit 5045d42

File tree

2 files changed

+49
-5
lines changed

2 files changed

+49
-5
lines changed

src/MongoDB.Driver/FilterDefinitionBuilder.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1492,6 +1492,11 @@ public AndFilterDefinition(IEnumerable<FilterDefinition<TDocument>> filters)
14921492

14931493
public override BsonDocument Render(IBsonSerializer<TDocument> documentSerializer, IBsonSerializerRegistry serializerRegistry)
14941494
{
1495+
if (_filters.Count == 0)
1496+
{
1497+
return new BsonDocument("$and", new BsonArray(0));
1498+
}
1499+
14951500
var document = new BsonDocument();
14961501

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

1506-
if (document.ElementCount == 0)
1507-
{
1508-
document = new BsonDocument("$and", new BsonArray(0));
1509-
}
1510-
15111511
return document;
15121512
}
15131513

tests/MongoDB.Driver.Tests/FilterDefinitionBuilderTests.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,28 @@ public void And_with_no_clauses()
141141
Assert(filter, "{ $and : [] }");
142142
}
143143

144+
[Fact]
145+
public void And_with_one_empty_clause()
146+
{
147+
var subject = CreateSubject<BsonDocument>();
148+
var empty = Builders<BsonDocument>.Filter.Empty;
149+
150+
var filter = subject.And(empty);
151+
152+
Assert(filter, "{ }");
153+
}
154+
155+
[Fact]
156+
public void And_with_two_empty_clauses()
157+
{
158+
var subject = CreateSubject<BsonDocument>();
159+
var empty = Builders<BsonDocument>.Filter.Empty;
160+
161+
var filter = subject.And(empty, empty);
162+
163+
Assert(filter, "{ }");
164+
}
165+
144166
[Fact]
145167
public void BitsAllClear()
146168
{
@@ -904,6 +926,28 @@ public void Or_with_no_clauses()
904926
Assert(filter, "{ $or : [] }");
905927
}
906928

929+
[Fact]
930+
public void Or_with_one_empty_clause()
931+
{
932+
var subject = CreateSubject<BsonDocument>();
933+
var empty = Builders<BsonDocument>.Filter.Empty;
934+
935+
var filter = subject.Or(empty);
936+
937+
Assert(filter, "{ $or : [{}] }");
938+
}
939+
940+
[Fact]
941+
public void Or_with_two_empty_clauses()
942+
{
943+
var subject = CreateSubject<BsonDocument>();
944+
var empty = Builders<BsonDocument>.Filter.Empty;
945+
946+
var filter = subject.Or(empty, empty);
947+
948+
Assert(filter, "{ $or : [{}, {}] }");
949+
}
950+
907951
[Fact]
908952
public void Nor_with_no_clauses()
909953
{

0 commit comments

Comments
 (0)