Skip to content

Commit d23c75d

Browse files
committed
Added domain to missing place
1 parent 681f461 commit d23c75d

File tree

35 files changed

+64
-55
lines changed

35 files changed

+64
-55
lines changed

src/MongoDB.Driver/AggregateExpressionDefinition.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ public DocumentsAggregateExpressionDefinition(
174174
public override BsonValue Render(RenderArgs<NoPipelineInput> args)
175175
{
176176
var documentSerializer = _documentSerializer ?? args.SerializerRegistry.GetSerializer<TDocument>();
177-
return SerializationHelper.SerializeValues(documentSerializer, _documents);
177+
return SerializationHelper.SerializeValues(args.SerializationDomain, documentSerializer, _documents);
178178
}
179179
}
180180
}

src/MongoDB.Driver/Core/WireProtocol/Messages/Encoders/BinaryEncoders/CommandMessageBinaryEncoder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ namespace MongoDB.Driver.Core.WireProtocol.Messages.Encoders.BinaryEncoders
2828
internal sealed class CommandMessageBinaryEncoder : MessageBinaryEncoderBase, IMessageEncoder
2929
{
3030
private const int EncryptedMaxBatchSize = 2 * 1024 * 1024; // 2 MiB
31+
// Looking at our implementation, it seems that type 0 sections always serialize/deserialize RawBsonDocument/BsonDocument, so they should use the default domain.
3132
private static readonly ICommandMessageSectionFormatter<Type0CommandMessageSection> __type0SectionFormatter = new Type0SectionFormatter(BsonSerializer.DefaultSerializationDomain);
32-
//QUESTION Looking at the spec and our implementation, it seems that type 0 sections always serialize/deserialize RawBsonDocument, so they should use the default domain. Am I missing something?
3333

3434
// constructors
3535
public CommandMessageBinaryEncoder(Stream stream, MessageEncoderSettings encoderSettings)

src/MongoDB.Driver/Core/WireProtocol/Messages/Encoders/JsonEncoders/CommandMessageJsonEncoder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ internal sealed class CommandMessageJsonEncoder : MessageJsonEncoderBase, IMessa
3333
public CommandMessageJsonEncoder(TextReader textReader, TextWriter textWriter, MessageEncoderSettings encoderSettings)
3434
: base(textReader, textWriter, encoderSettings)
3535
{
36-
//QUESTION Looking at the spec and our implementation, it seems that type 0 sections always serialize/deserialize RawBsonDocument, so they should use the default domain. Am I missing something?
36+
// Looking at our implementation, it seems that type 0 sections always serialize/deserialize RawBsonDocument/BsonDocument, so they should use the default domain.
3737
_type0SectionFormatter = new Type0SectionFormatter(BsonSerializer.DefaultSerializationDomain);
3838
_type1SectionFormatter = new Type1SectionFormatter(SerializationDomain);
3939
}

src/MongoDB.Driver/Linq/Linq3Implementation/GroupingWithOutputExpressionStageDefinitions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ protected override AstStage RenderGroupingStage(
109109
var groupByTranslation = ExpressionToAggregationExpressionTranslator.TranslateLambdaBody(context, partiallyEvaluatedGroupBy, inputSerializer, asRoot: true);
110110

111111
var valueSerializer = (IBsonSerializer<TValue>)groupByTranslation.Serializer;
112-
var serializedBoundaries = SerializationHelper.SerializeValues(valueSerializer, _boundaries);
113-
var serializedDefault = _options != null && _options.DefaultBucket.HasValue ? SerializationHelper.SerializeValue(valueSerializer, _options.DefaultBucket.Value) : null;
112+
var serializedBoundaries = SerializationHelper.SerializeValues(context.SerializationDomain, valueSerializer, _boundaries);
113+
var serializedDefault = _options != null && _options.DefaultBucket.HasValue ? SerializationHelper.SerializeValue(context.SerializationDomain, valueSerializer, _options.DefaultBucket.Value) : null;
114114
var pushElements = AstExpression.AccumulatorField("_elements", AstUnaryAccumulatorOperator.Push, AstExpression.RootVar);
115115
groupingOutputSerializer = IGroupingSerializer.Create(valueSerializer, inputSerializer);
116116

src/MongoDB.Driver/Linq/Linq3Implementation/Misc/SerializationHelper.cs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -195,11 +195,14 @@ public static bool IsRepresentedAsIntegerOrNullableInteger(IBsonSerializer seria
195195
}
196196

197197
public static BsonValue SerializeValue(IBsonSerializer serializer, ConstantExpression constantExpression, Expression containingExpression)
198+
=> SerializeValue(BsonSerializer.DefaultSerializationDomain, serializer, constantExpression, containingExpression);
199+
200+
public static BsonValue SerializeValue(IBsonSerializationDomain serializationDomain, IBsonSerializer serializer, ConstantExpression constantExpression, Expression containingExpression)
198201
{
199202
var value = constantExpression.Value;
200203
if (value == null || serializer.ValueType.IsAssignableFrom(value.GetType()))
201204
{
202-
return SerializeValue(serializer, value);
205+
return SerializeValue(serializationDomain, serializer, value);
203206
}
204207

205208
if (value.GetType().ImplementsIEnumerable(out var itemType) &&
@@ -209,35 +212,40 @@ itemSerializationInfo.Serializer is var itemSerializer &&
209212
itemSerializer.ValueType.IsAssignableFrom(itemType))
210213
{
211214
var ienumerableSerializer = IEnumerableSerializer.Create(itemSerializer);
212-
return SerializeValue(ienumerableSerializer, value);
215+
return SerializeValue(serializationDomain, ienumerableSerializer, value);
213216
}
214217

215218
throw new ExpressionNotSupportedException(constantExpression, containingExpression, because: "it was not possible to determine how to serialize the constant");
216219
}
217220

221+
218222
public static BsonValue SerializeValue(IBsonSerializer serializer, object value)
223+
=> SerializeValue(BsonSerializer.DefaultSerializationDomain, serializer, value);
224+
225+
//FP Isn't this similar to what SerializationInfo does...?
226+
public static BsonValue SerializeValue(IBsonSerializationDomain serializationDomain, IBsonSerializer serializer, object value)
219227
{
220228
var document = new BsonDocument();
221229
using (var writer = new BsonDocumentWriter(document))
222230
{
223231
writer.WriteStartDocument();
224232
writer.WriteName("_v");
225-
var context = BsonSerializationContext.CreateRoot(writer, BsonSerializer.DefaultSerializationDomain); //QUESTION Is it ok here to use the default domain?
233+
var context = BsonSerializationContext.CreateRoot(writer, serializationDomain);
226234
serializer.Serialize(context, value);
227235
writer.WriteEndDocument();
228236
}
229237
return document["_v"];
230238
}
231239

232-
public static BsonArray SerializeValues(IBsonSerializer itemSerializer, IEnumerable values)
240+
public static BsonArray SerializeValues(IBsonSerializationDomain serializationDomain, IBsonSerializer itemSerializer, IEnumerable values)
233241
{
234242
var document = new BsonDocument();
235243
using (var writer = new BsonDocumentWriter(document))
236244
{
237245
writer.WriteStartDocument();
238246
writer.WriteName("_v");
239247
writer.WriteStartArray();
240-
var context = BsonSerializationContext.CreateRoot(writer, BsonSerializer.DefaultSerializationDomain); //QUESTION Is it ok here to use the default domain?
248+
var context = BsonSerializationContext.CreateRoot(writer, serializationDomain);
241249
foreach(var value in values)
242250
{
243251
itemSerializer.Serialize(context, value);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public static TranslatedExpression Translate(TranslationContext context, MethodC
5656
if (elementExpression is ConstantExpression elementConstantExpression)
5757
{
5858
var value = elementConstantExpression.Value;
59-
var serializedValue = SerializationHelper.SerializeValue(itemSerializer, value);
59+
var serializedValue = SerializationHelper.SerializeValue(context.SerializationDomain, itemSerializer, value);
6060
elementTranslation = new TranslatedExpression(elementExpression, AstExpression.Constant(serializedValue), itemSerializer);
6161
}
6262
else

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public static TranslatedExpression Translate(TranslationContext context, MethodC
5858

5959
if (serializer != null)
6060
{
61-
var serializedValue = SerializationHelper.SerializeValue(serializer, value);
61+
var serializedValue = SerializationHelper.SerializeValue(context.SerializationDomain, serializer, value);
6262
var ast = AstExpression.Constant(serializedValue);
6363
return new TranslatedExpression(expression, ast, serializer);
6464
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ private static AstExpression GetKeyFieldName(TranslationContext context, Express
6464
if (keyExpression is ConstantExpression keyConstantExpression)
6565
{
6666
var keyValue = keyConstantExpression.Value;
67-
var serializedKeyValue = SerializationHelper.SerializeValue(keySerializer, keyValue);
67+
var serializedKeyValue = SerializationHelper.SerializeValue(context.SerializationDomain, keySerializer, keyValue);
6868
ThrowIfKeyIsNotRepresentedAsAString(expression, serializedKeyValue.BsonType);
6969
return AstExpression.Constant(serializedKeyValue);
7070
}

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,15 @@ private static (BsonBinarySubType? subType, ByteOrder? byteOrder, string format,
5959
{
6060
return optionsExpression switch
6161
{
62-
ConstantExpression constantExpression => TranslateOptions(constantExpression, toSerializer),
62+
ConstantExpression constantExpression => TranslateOptions(context.SerializationDomain, constantExpression, toSerializer),
6363
MemberInitExpression memberInitExpressionExpression => TranslateOptions(context, expression, memberInitExpressionExpression, toSerializer),
6464
_ => throw new ExpressionNotSupportedException(optionsExpression, containingExpression: expression, because: "the options argument must be either a constant or a member initialization expression.")
6565
};
6666
}
6767

6868
private static (BsonBinarySubType? subType, ByteOrder? byteOrder, string format, AstExpression onErrorAst, AstExpression onNullAst)
6969
TranslateOptions(
70+
IBsonSerializationDomain serializationDomain,
7071
ConstantExpression optionsExpression,
7172
IBsonSerializer toSerializer)
7273
{
@@ -78,13 +79,13 @@ private static (BsonBinarySubType? subType, ByteOrder? byteOrder, string format,
7879
{
7980
if (options.OnErrorWasSet(out var onErrorValue))
8081
{
81-
var serializedOnErrorValue = SerializationHelper.SerializeValue(toSerializer, onErrorValue);
82+
var serializedOnErrorValue = SerializationHelper.SerializeValue(serializationDomain, toSerializer, onErrorValue);
8283
onErrorAst = AstExpression.Constant(serializedOnErrorValue);
8384
}
8485

8586
if (options.OnNullWasSet(out var onNullValue))
8687
{
87-
var serializedOnNullValue = SerializationHelper.SerializeValue(toSerializer, onNullValue);
88+
var serializedOnNullValue = SerializationHelper.SerializeValue(serializationDomain, toSerializer, onNullValue);
8889
onNullAst = AstExpression.Constant(serializedOnNullValue);
8990
}
9091
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public static TranslatedExpression Translate(TranslationContext context, MethodC
6464
{
6565
var sourceItemSerializer = ArraySerializerHelper.GetItemSerializer(sourceTranslation.Serializer);
6666
var defaultValue = sourceItemSerializer.ValueType.GetDefaultValue();
67-
var serializedDefaultValue = SerializationHelper.SerializeValue(sourceItemSerializer, defaultValue);
67+
var serializedDefaultValue = SerializationHelper.SerializeValue(context.SerializationDomain, sourceItemSerializer, defaultValue);
6868
defaultValueAst = AstExpression.Constant(new BsonArray { serializedDefaultValue });
6969
}
7070
var ast = AstExpression.Let(

0 commit comments

Comments
 (0)