Skip to content

Commit 3e59f5a

Browse files
committed
Improvements
1 parent 50c933c commit 3e59f5a

File tree

11 files changed

+56
-11
lines changed

11 files changed

+56
-11
lines changed

src/MongoDB.Bson/BsonDefaults.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,9 @@ public static IBsonSerializer DynamicDocumentSerializer
4343
set => BsonSerializer.DefaultSerializationDomain.BsonDefaults.DynamicDocumentSerializer = value;
4444
}
4545

46-
/* QUESTION How do we do with those two? I don't think I can remove references to them without breaking public API.
47-
* We should modify the API to have those two values (in the writer/reader settings where they are used) be nullable.
46+
/* DOMAIN-API We should modify the API to have those two values (and in the writer/reader settings where they are used) be nullable.
4847
* The problem is that we need to now when these values have been set externally or not. If they have not, then they should
49-
* be retrieved from the closest domain. We could use a negative sentinel value for that, but that would not be the best.
48+
* be retrieved from the closest domain.
5049
*/
5150

5251
/// <summary>

src/MongoDB.Driver/ClusteredIndexOptions.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public bool Unique
6464
set => _unique = value;
6565
}
6666

67+
//DOMAIN-API This version will need to go away.
6768
internal BsonDocument Render(IBsonSerializer<TDocument> documentSerializer, IBsonSerializerRegistry serializerRegistry, ExpressionTranslationOptions translationOptions)
6869
{
6970
return new BsonDocument {
@@ -72,5 +73,14 @@ internal BsonDocument Render(IBsonSerializer<TDocument> documentSerializer, IBso
7273
{ "name", _name, _name != null }
7374
};
7475
}
76+
77+
internal BsonDocument Render(IBsonSerializer<TDocument> documentSerializer, IBsonSerializationDomain serializationDomain, ExpressionTranslationOptions translationOptions)
78+
{
79+
return new BsonDocument {
80+
{ "key", _key.Render(new(documentSerializer, serializationDomain, translationOptions: translationOptions)) },
81+
{ "unique", _unique },
82+
{ "name", _name, _name != null }
83+
};
84+
}
7585
}
7686
}

src/MongoDB.Driver/Core/Operations/RetryableInsertCommandOperation.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ public override void Serialize(BsonSerializationContext context, BsonSerializati
139139
{
140140
if (_cachedSerializer.ValueType != actualType)
141141
{
142-
_cachedSerializer = BsonSerializer.LookupSerializer(actualType); //FP This needs to go, need to access MongoDB.Bson internals to access domain
142+
_cachedSerializer = context.SerializationDomain.LookupSerializer(actualType);
143143
}
144144
serializer = _cachedSerializer;
145145
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public void FormatSection(ClientBulkWriteOpsCommandMessageSection section, IBson
6363
throw new ArgumentException("Writer must be an instance of BsonBinaryWriter.");
6464
}
6565

66-
_serializerRegistry = BsonSerializer.SerializerRegistry; //FP This needs to go, need to access MongoDB.Bson internals to access domain
66+
_serializerRegistry = writer.Settings.SerializationDomain.SerializerRegistry;
6767
var serializationContext = BsonSerializationContext.CreateRoot(binaryWriter);
6868
_idsMap = section.IdsMap;
6969
var stream = binaryWriter.BsonStream;

src/MongoDB.Driver/CreateCollectionOptions.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class CreateCollectionOptions
3838
private TimeSeriesOptions _timeSeriesOptions;
3939
private bool? _usePowerOf2Sizes;
4040
private IBsonSerializerRegistry _serializerRegistry;
41+
private IBsonSerializationDomain _serializationDomain;
4142
private DocumentValidationAction? _validationAction;
4243
private DocumentValidationLevel? _validationLevel;
4344

@@ -126,6 +127,8 @@ public bool? NoPadding
126127
set { _noPadding = value; }
127128
}
128129

130+
//DOMAIN-API We need to remove this, and have only the SerializationDomain property.
131+
//We should also decide if we even need any of those two properties.
129132
/// <summary>
130133
/// Gets or sets the serializer registry.
131134
/// </summary>
@@ -135,6 +138,12 @@ public IBsonSerializerRegistry SerializerRegistry
135138
set { _serializerRegistry = value; }
136139
}
137140

141+
internal IBsonSerializationDomain SerializationDomain
142+
{
143+
get => _serializationDomain;
144+
set => _serializationDomain = value;
145+
}
146+
138147
/// <summary>
139148
/// Gets or sets the storage engine options.
140149
/// </summary>
@@ -203,6 +212,7 @@ public virtual CreateCollectionOptions Clone() =>
203212
_maxSize = _maxSize,
204213
_noPadding = _noPadding,
205214
_serializerRegistry = _serializerRegistry,
215+
_serializationDomain = _serializationDomain,
206216
_storageEngine = _storageEngine,
207217
_timeSeriesOptions = _timeSeriesOptions,
208218
_usePowerOf2Sizes = _usePowerOf2Sizes,
@@ -245,6 +255,7 @@ internal static CreateCollectionOptions<TDocument> CoercedFrom(CreateCollectionO
245255
MaxSize = options.MaxSize,
246256
NoPadding = options.NoPadding,
247257
SerializerRegistry = options.SerializerRegistry,
258+
SerializationDomain = options.SerializationDomain,
248259
StorageEngine = options.StorageEngine,
249260
TimeSeriesOptions = options.TimeSeriesOptions,
250261
UsePowerOf2Sizes = options.UsePowerOf2Sizes,

src/MongoDB.Driver/CreateViewOptions.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public class CreateViewOptions<TDocument>
2727
private Collation _collation;
2828
private IBsonSerializer<TDocument> _documentSerializer;
2929
private IBsonSerializerRegistry _serializerRegistry;
30+
private IBsonSerializationDomain _serializationDomain;
3031

3132
// properties
3233
/// <summary>
@@ -53,6 +54,8 @@ public IBsonSerializer<TDocument> DocumentSerializer
5354
set { _documentSerializer = value; }
5455
}
5556

57+
//DOMAIN-API We need to remove this, and have only the SerializationDomain property.
58+
//We should also decide if we even need any of those two properties.
5659
/// <summary>
5760
/// Gets or sets the serializer registry.
5861
/// </summary>
@@ -64,5 +67,11 @@ public IBsonSerializerRegistry SerializerRegistry
6467
get { return _serializerRegistry; }
6568
set { _serializerRegistry = value; }
6669
}
70+
71+
internal IBsonSerializationDomain SerializationDomain
72+
{
73+
get => _serializationDomain;
74+
set => _serializationDomain = value;
75+
}
6776
}
6877
}

src/MongoDB.Driver/FieldValueSerializerHelper.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
using MongoDB.Bson;
2121
using MongoDB.Bson.Serialization;
2222
using MongoDB.Bson.Serialization.Serializers;
23+
using MongoDB.Driver.Linq.Linq3Implementation.Serializers;
2324
using MongoDB.Driver.Support;
2425

2526
namespace MongoDB.Driver
@@ -51,7 +52,7 @@ public static IBsonSerializer GetSerializerForValueType(IBsonSerializer fieldSer
5152
// serialize numeric values without converting them
5253
if (fieldType.IsNumeric() && valueType.IsNumeric())
5354
{
54-
var valueSerializer = BsonSerializer.SerializerRegistry.GetSerializer(valueType); //QUESTION What to we do here? We don't even use the input serializer registry. Probably ask Robert
55+
var valueSerializer = StandardSerializers.GetSerializer(valueType);
5556
if (HasStringRepresentation(fieldSerializer))
5657
{
5758
valueSerializer = WithStringRepresentation(valueSerializer);

src/MongoDB.Driver/MongoDatabase.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -660,12 +660,19 @@ private Task CreateCollectionHelperAsync<TDocument>(IClientSessionHandle session
660660

661661
private IWriteOperation<BsonDocument> CreateCreateCollectionOperation<TDocument>(string name, CreateCollectionOptions<TDocument> options, ExpressionTranslationOptions translationOptions)
662662
{
663-
var serializerRegistry = options.SerializerRegistry ?? BsonSerializer.SerializerRegistry; //QUESTION What do we do here....?
663+
var serializerRegistry = options.SerializerRegistry ?? BsonSerializer.SerializerRegistry;
664664
var documentSerializer = options.DocumentSerializer ?? serializerRegistry.GetSerializer<TDocument>();
665665

666-
var clusteredIndex = options.ClusteredIndex?.Render(documentSerializer, serializerRegistry, translationOptions);
667-
var validator = options.Validator?.Render(new(documentSerializer, serializerRegistry, translationOptions: translationOptions));
666+
//DOMAIN-API This will need to go away
667+
RenderArgs<TDocument> renderArgs = options.SerializationDomain is null ?
668+
new(documentSerializer, serializerRegistry, translationOptions: translationOptions) :
669+
new(documentSerializer, options.SerializationDomain, translationOptions: translationOptions);
670+
671+
//DOMAIN-API This will need to go away
672+
var clusteredIndex = options.SerializationDomain is null? options.ClusteredIndex?.Render(documentSerializer, serializerRegistry, translationOptions):
673+
options.ClusteredIndex?.Render(documentSerializer, options.SerializationDomain, translationOptions);
668674

675+
var validator = options.Validator?.Render(renderArgs);
669676
var collectionNamespace = new CollectionNamespace(_databaseNamespace, name);
670677

671678
var effectiveEncryptedFields = EncryptedCollectionHelper.GetEffectiveEncryptedFields(collectionNamespace, options.EncryptedFields, _client.Settings?.AutoEncryptionOptions?.EncryptedFieldsMap);
@@ -705,7 +712,13 @@ private CreateViewOperation CreateCreateViewOperation<TDocument, TResult>(
705712
{
706713
var serializerRegistry = options.SerializerRegistry ?? BsonSerializer.SerializerRegistry;
707714
var documentSerializer = options.DocumentSerializer ?? serializerRegistry.GetSerializer<TDocument>();
708-
var pipelineDocuments = pipeline.Render(new (documentSerializer, serializerRegistry, translationOptions: translationOptions)).Documents;
715+
716+
//DOMAIN-API This will need to go away
717+
RenderArgs<TDocument> renderArgs = options.SerializationDomain is null ?
718+
new(documentSerializer, serializerRegistry, translationOptions: translationOptions) :
719+
new(documentSerializer, options.SerializationDomain, translationOptions: translationOptions);
720+
721+
var pipelineDocuments = pipeline.Render(renderArgs).Documents;
709722
return new CreateViewOperation(_databaseNamespace, viewName, viewOn, pipelineDocuments, GetMessageEncoderSettings())
710723
{
711724
Collation = options.Collation,

src/MongoDB.Driver/PipelineStageDefinition.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ public interface IPipelineStageDefinition
139139
/// </summary>
140140
Type OutputType { get; }
141141

142+
//DOMAIN-API We need to swap the serializer registry for the serialization domain.
142143
/// <summary>
143144
/// Renders the specified document serializer.
144145
/// </summary>

src/MongoDB.Driver/RenderArgs.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public record struct RenderArgs<TDocument>
4040
private readonly ExpressionTranslationOptions _translationOptions = default;
4141
private readonly IBsonSerializationDomain _serializationDomain = default;
4242

43-
//QUESTION We need to stop using this constructor internally, and use the one with the serialization domain instead. How do we do that...?
43+
//DOMAIN-API We need to stop using this constructor, and use the one with the serialization domain instead.
4444
/// <summary>
4545
/// Initializes a new instance of the <see cref="RenderArgs{TDocument}"/> record.
4646
/// </summary>

0 commit comments

Comments
 (0)