Skip to content

Commit e3def97

Browse files
committed
CSHARP-1409: Added bit operators to legacy.
1 parent 28e3db4 commit e3def97

File tree

3 files changed

+229
-1
lines changed

3 files changed

+229
-1
lines changed

src/MongoDB.Driver.Legacy.Tests/Builders/QueryBuilderTests.cs

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,46 @@ public void TestAndXNE1YNE2()
196196
Assert.AreEqual(NegateArbitraryQuery(expected), Query.Not(query).ToJson());
197197
}
198198

199+
[Test]
200+
public void TestBitsAllClear()
201+
{
202+
var query = Query.BitsAllClear("x", 3);
203+
var expected = "{ \"x\" : { \"$bitsAllClear\" : NumberLong(3) } }";
204+
var negated = "{ \"x\" : { \"$not\" : { \"$bitsAllClear\" : NumberLong(3) } } }";
205+
Assert.AreEqual(expected, query.ToJson());
206+
Assert.AreEqual(negated, Query.Not(query).ToJson());
207+
}
208+
209+
[Test]
210+
public void TestBitsAllSet()
211+
{
212+
var query = Query.BitsAllSet("x", 3);
213+
var expected = "{ \"x\" : { \"$bitsAllSet\" : NumberLong(3) } }";
214+
var negated = "{ \"x\" : { \"$not\" : { \"$bitsAllSet\" : NumberLong(3) } } }";
215+
Assert.AreEqual(expected, query.ToJson());
216+
Assert.AreEqual(negated, Query.Not(query).ToJson());
217+
}
218+
219+
[Test]
220+
public void TestBitsAnyClear()
221+
{
222+
var query = Query.BitsAnyClear("x", 3);
223+
var expected = "{ \"x\" : { \"$bitsAnyClear\" : NumberLong(3) } }";
224+
var negated = "{ \"x\" : { \"$not\" : { \"$bitsAnyClear\" : NumberLong(3) } } }";
225+
Assert.AreEqual(expected, query.ToJson());
226+
Assert.AreEqual(negated, Query.Not(query).ToJson());
227+
}
228+
229+
[Test]
230+
public void TestBitsAnySet()
231+
{
232+
var query = Query.BitsAnySet("x", 3);
233+
var expected = "{ \"x\" : { \"$bitsAnySet\" : NumberLong(3) } }";
234+
var negated = "{ \"x\" : { \"$not\" : { \"$bitsAnySet\" : NumberLong(3) } } }";
235+
Assert.AreEqual(expected, query.ToJson());
236+
Assert.AreEqual(negated, Query.Not(query).ToJson());
237+
}
238+
199239
[Test]
200240
public void TestElementMatch()
201241
{
@@ -967,7 +1007,7 @@ public void TestNearWithGeoJsonWithSpherical()
9671007
}
9681008
}
9691009

970-
1010+
9711011
[Test]
9721012
public void TestText()
9731013
{

src/MongoDB.Driver.Legacy.Tests/Builders/QueryBuilderTypedTests.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,38 @@ public void TestAnd_NotExpression()
112112
Assert.AreEqual(expected, query.ToJson());
113113
}
114114

115+
[Test]
116+
public void TestBitsAllClear()
117+
{
118+
var query = Query<A>.BitsAllClear(x => x.X, 3);
119+
var expected = "{ \"x\" : { \"$bitsAllClear\" : NumberLong(3) } }";
120+
Assert.AreEqual(expected, query.ToJson());
121+
}
122+
123+
[Test]
124+
public void TestBitsAllSet()
125+
{
126+
var query = Query<A>.BitsAllSet(x => x.X, 3);
127+
var expected = "{ \"x\" : { \"$bitsAllSet\" : NumberLong(3) } }";
128+
Assert.AreEqual(expected, query.ToJson());
129+
}
130+
131+
[Test]
132+
public void TestBitsAnyClear()
133+
{
134+
var query = Query<A>.BitsAnyClear(x => x.X, 3);
135+
var expected = "{ \"x\" : { \"$bitsAnyClear\" : NumberLong(3) } }";
136+
Assert.AreEqual(expected, query.ToJson());
137+
}
138+
139+
[Test]
140+
public void TestBitsAnySet()
141+
{
142+
var query = Query<A>.BitsAnySet(x => x.X, 3);
143+
var expected = "{ \"x\" : { \"$bitsAnySet\" : NumberLong(3) } }";
144+
Assert.AreEqual(expected, query.ToJson());
145+
}
146+
115147
[Test]
116148
public void TestBooleanExpressionTrueForMethods()
117149
{

src/MongoDB.Driver.Legacy/Builders/QueryBuilder.cs

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,50 @@ public static IMongoQuery And(params IMongoQuery[] queries)
113113
return And((IEnumerable<IMongoQuery>)queries);
114114
}
115115

116+
/// <summary>
117+
/// Tests that the value of the named element has all of the specified bits clear.
118+
/// </summary>
119+
/// <param name="name">The name.</param>
120+
/// <param name="bitmask">The bitmask.</param>
121+
/// <returns>An IMongoQuery.</returns>
122+
public static IMongoQuery BitsAllClear(string name, long bitmask)
123+
{
124+
return Query.Create(name, new BsonDocument("$bitsAllClear", bitmask));
125+
}
126+
127+
/// <summary>
128+
/// Tests that the value of the named element has all of the specified bits set.
129+
/// </summary>
130+
/// <param name="name">The name.</param>
131+
/// <param name="bitmask">The bitmask.</param>
132+
/// <returns>An IMongoQuery.</returns>
133+
public static IMongoQuery BitsAllSet(string name, long bitmask)
134+
{
135+
return Query.Create(name, new BsonDocument("$bitsAllSet", bitmask));
136+
}
137+
138+
/// <summary>
139+
/// Tests that the value of the named element has any of the specified bits clear.
140+
/// </summary>
141+
/// <param name="name">The name.</param>
142+
/// <param name="bitmask">The bitmask.</param>
143+
/// <returns>An IMongoQuery.</returns>
144+
public static IMongoQuery BitsAnyClear(string name, long bitmask)
145+
{
146+
return Query.Create(name, new BsonDocument("$bitsAnyClear", bitmask));
147+
}
148+
149+
/// <summary>
150+
/// Tests that the value of the named element has any of the specified bits set.
151+
/// </summary>
152+
/// <param name="name">The name.</param>
153+
/// <param name="bitmask">The bitmask.</param>
154+
/// <returns>An IMongoQuery.</returns>
155+
public static IMongoQuery BitsAnySet(string name, long bitmask)
156+
{
157+
return Query.Create(name, new BsonDocument("$bitsAnySet", bitmask));
158+
}
159+
116160
/// <summary>
117161
/// Creates a query manually.
118162
/// </summary>
@@ -1104,6 +1148,50 @@ public static IMongoQuery All<TValue>(Expression<Func<TDocument, IEnumerable<TVa
11041148
return new QueryBuilder<TDocument>().All(memberExpression, values);
11051149
}
11061150

1151+
/// <summary>
1152+
/// Tests that the value of the named element has all of the specified bits clear.
1153+
/// </summary>
1154+
/// <param name="memberExpression">The member expression.</param>
1155+
/// <param name="bitmask">The bitmask.</param>
1156+
/// <returns>An IMongoQuery.</returns>
1157+
public static IMongoQuery BitsAllClear(Expression<Func<TDocument, object>> memberExpression, long bitmask)
1158+
{
1159+
return new QueryBuilder<TDocument>().BitsAllClear(memberExpression, bitmask);
1160+
}
1161+
1162+
/// <summary>
1163+
/// Tests that the value of the named element has all of the specified bits set.
1164+
/// </summary>
1165+
/// <param name="memberExpression">The member expression.</param>
1166+
/// <param name="bitmask">The bitmask.</param>
1167+
/// <returns>An IMongoQuery.</returns>
1168+
public static IMongoQuery BitsAllSet(Expression<Func<TDocument, object>> memberExpression, long bitmask)
1169+
{
1170+
return new QueryBuilder<TDocument>().BitsAllSet(memberExpression, bitmask);
1171+
}
1172+
1173+
/// <summary>
1174+
/// Tests that the value of the named element has any of the specified bits clear.
1175+
/// </summary>
1176+
/// <param name="memberExpression">The member expression.</param>
1177+
/// <param name="bitmask">The bitmask.</param>
1178+
/// <returns>An IMongoQuery.</returns>
1179+
public static IMongoQuery BitsAnyClear(Expression<Func<TDocument, object>> memberExpression, long bitmask)
1180+
{
1181+
return new QueryBuilder<TDocument>().BitsAnyClear(memberExpression, bitmask);
1182+
}
1183+
1184+
/// <summary>
1185+
/// Tests that the value of the named element has any of the specified bits set.
1186+
/// </summary>
1187+
/// <param name="memberExpression">The member expression.</param>
1188+
/// <param name="bitmask">The bitmask.</param>
1189+
/// <returns>An IMongoQuery.</returns>
1190+
public static IMongoQuery BitsAnySet(Expression<Func<TDocument, object>> memberExpression, long bitmask)
1191+
{
1192+
return new QueryBuilder<TDocument>().BitsAnySet(memberExpression, bitmask);
1193+
}
1194+
11071195
/// <summary>
11081196
/// Tests that at least one item of the named array element matches a query (see $elemMatch).
11091197
/// </summary>
@@ -1692,6 +1780,74 @@ public IMongoQuery And(params IMongoQuery[] queries)
16921780
return And((IEnumerable<IMongoQuery>)queries);
16931781
}
16941782

1783+
/// <summary>
1784+
/// Tests that the value of the named element has all of the specified bits clear.
1785+
/// </summary>
1786+
/// <param name="memberExpression">The member expression.</param>
1787+
/// <param name="bitmask">The bitmask.</param>
1788+
/// <returns>An IMongoQuery.</returns>
1789+
public IMongoQuery BitsAllClear(Expression<Func<TDocument, object>> memberExpression, long bitmask)
1790+
{
1791+
if (memberExpression == null)
1792+
{
1793+
throw new ArgumentNullException("memberExpression");
1794+
}
1795+
1796+
var serializationInfo = _serializationInfoHelper.GetSerializationInfo(memberExpression);
1797+
return Query.BitsAllClear(serializationInfo.ElementName, bitmask);
1798+
}
1799+
1800+
/// <summary>
1801+
/// Tests that the value of the named element has all of the specified bits set.
1802+
/// </summary>
1803+
/// <param name="memberExpression">The member expression.</param>
1804+
/// <param name="bitmask">The bitmask.</param>
1805+
/// <returns>An IMongoQuery.</returns>
1806+
public IMongoQuery BitsAllSet(Expression<Func<TDocument, object>> memberExpression, long bitmask)
1807+
{
1808+
if (memberExpression == null)
1809+
{
1810+
throw new ArgumentNullException("memberExpression");
1811+
}
1812+
1813+
var serializationInfo = _serializationInfoHelper.GetSerializationInfo(memberExpression);
1814+
return Query.BitsAllSet(serializationInfo.ElementName, bitmask);
1815+
}
1816+
1817+
/// <summary>
1818+
/// Tests that the value of the named element has any of the specified bits clear.
1819+
/// </summary>
1820+
/// <param name="memberExpression">The member expression.</param>
1821+
/// <param name="bitmask">The bitmask.</param>
1822+
/// <returns>An IMongoQuery.</returns>
1823+
public IMongoQuery BitsAnyClear(Expression<Func<TDocument, object>> memberExpression, long bitmask)
1824+
{
1825+
if (memberExpression == null)
1826+
{
1827+
throw new ArgumentNullException("memberExpression");
1828+
}
1829+
1830+
var serializationInfo = _serializationInfoHelper.GetSerializationInfo(memberExpression);
1831+
return Query.BitsAnyClear(serializationInfo.ElementName, bitmask);
1832+
}
1833+
1834+
/// <summary>
1835+
/// Tests that the value of the named element has any of the specified bits set.
1836+
/// </summary>
1837+
/// <param name="memberExpression">The member expression.</param>
1838+
/// <param name="bitmask">The bitmask.</param>
1839+
/// <returns>An IMongoQuery.</returns>
1840+
public IMongoQuery BitsAnySet(Expression<Func<TDocument, object>> memberExpression, long bitmask)
1841+
{
1842+
if (memberExpression == null)
1843+
{
1844+
throw new ArgumentNullException("memberExpression");
1845+
}
1846+
1847+
var serializationInfo = _serializationInfoHelper.GetSerializationInfo(memberExpression);
1848+
return Query.BitsAnySet(serializationInfo.ElementName, bitmask);
1849+
}
1850+
16951851
/// <summary>
16961852
/// Tests that at least one item of the named array element matches a query (see $elemMatch).
16971853
/// </summary>

0 commit comments

Comments
 (0)