Skip to content

Commit a416316

Browse files
committed
move keys and values tests to CSharp5779Tests.cs
1 parent 94484c9 commit a416316

File tree

3 files changed

+1805
-308
lines changed

3 files changed

+1805
-308
lines changed

src/MongoDB.Driver/Linq/Linq3Implementation/Translators/ExpressionToAggregationExpressionTranslators/MethodTranslators/SumMethodToAggregationExpressionTranslator.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using MongoDB.Driver.Linq.Linq3Implementation.Ast.Expressions;
2020
using MongoDB.Driver.Linq.Linq3Implementation.Misc;
2121
using MongoDB.Driver.Linq.Linq3Implementation.Reflection;
22+
using MongoDB.Driver.Linq.Linq3Implementation.Serializers;
2223

2324
namespace MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.MethodTranslators
2425
{
@@ -84,8 +85,22 @@ public static TranslatedExpression Translate(TranslationContext context, MethodC
8485
IBsonSerializer serializer;
8586
if (arguments.Count == 1)
8687
{
87-
ast = AstExpression.Sum(sourceTranslation.Ast);
88-
serializer = sourceItemSerializer;
88+
if (sourceItemSerializer is IWrappedValueSerializer wrappedValueSerializer)
89+
{
90+
var itemVar = AstExpression.Var("item");
91+
var unwrappedItemAst = AstExpression.GetField(itemVar, wrappedValueSerializer.FieldName);
92+
ast = AstExpression.Sum(
93+
AstExpression.Map(
94+
input: sourceTranslation.Ast,
95+
@as: itemVar,
96+
@in: unwrappedItemAst));
97+
serializer = wrappedValueSerializer.ValueSerializer;
98+
}
99+
else
100+
{
101+
ast = AstExpression.Sum(sourceTranslation.Ast);
102+
serializer = sourceItemSerializer;
103+
}
89104
}
90105
else
91106
{

src/MongoDB.Driver/Linq/Linq3Implementation/Translators/ExpressionToFilterTranslators/ExpressionTranslators/CountComparisonExpressionToFilterTranslator.cs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515

1616
using System.Linq.Expressions;
1717
using MongoDB.Bson;
18-
using MongoDB.Bson.Serialization.Serializers;
18+
using MongoDB.Bson.Serialization;
19+
using MongoDB.Bson.Serialization.Options;
1920
using MongoDB.Driver.Linq.Linq3Implementation.Ast.Filters;
2021
using MongoDB.Driver.Linq.Linq3Implementation.Misc;
2122
using MongoDB.Driver.Linq.Linq3Implementation.Reflection;
@@ -62,10 +63,36 @@ public static bool CanTranslate(Expression leftExpression, Expression rightExpre
6263
public static AstFilter Translate(TranslationContext context, BinaryExpression expression, AstComparisonFilterOperator comparisonOperator, Expression enumerableExpression, Expression sizeExpression)
6364
{
6465
var fieldTranslation = ExpressionToFilterFieldTranslator.TranslateEnumerable(context, enumerableExpression);
65-
SerializationHelper.EnsureRepresentationIsArray(enumerableExpression, fieldTranslation.Serializer);
6666

67-
if (TryConvertSizeExpressionToBsonValue(sizeExpression, out var size))
67+
if (!TryConvertSizeExpressionToBsonValue(sizeExpression, out var size))
6868
{
69+
throw new ExpressionNotSupportedException(expression);
70+
}
71+
72+
// Handle dictionary document representation for simple empty/not-empty checks
73+
if (fieldTranslation.Serializer is IBsonDictionarySerializer { DictionaryRepresentation: DictionaryRepresentation.Document })
74+
{
75+
var sizeValue = size.ToInt64();
76+
77+
switch (comparisonOperator)
78+
{
79+
// Check for "not empty" patterns: Count > 0, Count >= 1, Count != 0
80+
case AstComparisonFilterOperator.Gt when sizeValue == 0:
81+
case AstComparisonFilterOperator.Gte when sizeValue == 1:
82+
case AstComparisonFilterOperator.Ne when sizeValue == 0:
83+
return AstFilter.Ne(fieldTranslation.Ast, new BsonDocument());
84+
85+
// Check for "empty" patterns: Count == 0, Count <= 0, Count < 1
86+
case AstComparisonFilterOperator.Eq when sizeValue == 0:
87+
case AstComparisonFilterOperator.Lte when sizeValue == 0:
88+
case AstComparisonFilterOperator.Lt when sizeValue == 1:
89+
return AstFilter.Eq(fieldTranslation.Ast, new BsonDocument());
90+
}
91+
}
92+
else
93+
{
94+
SerializationHelper.EnsureRepresentationIsArray(enumerableExpression, fieldTranslation.Serializer);
95+
6996
switch (comparisonOperator)
7097
{
7198
case AstComparisonFilterOperator.Eq:

0 commit comments

Comments
 (0)