Skip to content

Commit 166edbf

Browse files
committed
Fixes according to PR
1 parent 4afcaef commit 166edbf

File tree

2 files changed

+35
-61
lines changed

2 files changed

+35
-61
lines changed

src/MongoDB.Driver/Search/OperatorSearchDefinitions.cs

+32-59
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public AutocompleteSearchDefinition(
4646
}
4747

4848
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
49-
RenderedFieldDefinition renderedFieldDefinition = null) =>
49+
IBsonSerializer fieldSerializer = null) =>
5050
new()
5151
{
5252
{ "query", _query.Render() },
@@ -81,7 +81,7 @@ public CompoundSearchDefinition(
8181
}
8282

8383
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
84-
RenderedFieldDefinition renderedFieldDefinition = null)
84+
IBsonSerializer fieldSerializer = null)
8585
{
8686
return new()
8787
{
@@ -110,7 +110,7 @@ public EmbeddedDocumentSearchDefinition(FieldDefinition<TDocument, IEnumerable<T
110110
}
111111

112112
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
113-
RenderedFieldDefinition renderedFieldDefinition = null)
113+
IBsonSerializer fieldSerializer = null)
114114
{
115115
// Add base path to all nested operator paths
116116
var pathPrefix = _path.Render(args).AsString;
@@ -133,23 +133,14 @@ public EqualsSearchDefinition(FieldDefinition<TDocument> path, TValue value, Sea
133133
}
134134

135135
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
136-
RenderedFieldDefinition renderedFieldDefinition = null)
136+
IBsonSerializer fieldSerializer = null)
137137
{
138-
IBsonSerializer valueSerializer;
139-
140-
if (_path is SingleSearchPathDefinition<TDocument>)
141-
{
142-
valueSerializer = renderedFieldDefinition!.FieldSerializer switch
143-
{
144-
null => BsonSerializer.LookupSerializer<TValue>(),
145-
IBsonArraySerializer => ArraySerializerHelper.GetItemSerializer(renderedFieldDefinition.FieldSerializer),
146-
_ => renderedFieldDefinition.FieldSerializer
147-
};
148-
}
149-
else
138+
var valueSerializer = fieldSerializer switch
150139
{
151-
valueSerializer = BsonSerializer.LookupSerializer<TValue>();
152-
}
140+
null => args.SerializerRegistry.GetSerializer<TValue>(),
141+
IBsonArraySerializer => ArraySerializerHelper.GetItemSerializer(fieldSerializer),
142+
_ => fieldSerializer
143+
};
153144

154145
var document = new BsonDocument();
155146
using var bsonWriter = new BsonDocumentWriter(document);
@@ -184,7 +175,7 @@ public FacetSearchDefinition(SearchDefinition<TDocument> @operator, IEnumerable<
184175
}
185176

186177
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
187-
RenderedFieldDefinition renderedFieldDefinition = null) =>
178+
IBsonSerializer fieldSerializer = null) =>
188179
new()
189180
{
190181
{ "operator", _operator.Render(args) },
@@ -210,7 +201,7 @@ public GeoShapeSearchDefinition(
210201
}
211202

212203
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
213-
RenderedFieldDefinition renderedFieldDefinition = null) =>
204+
IBsonSerializer fieldSerializer = null) =>
214205
new()
215206
{
216207
{ "geometry", _geometry.ToBsonDocument() },
@@ -233,7 +224,7 @@ public GeoWithinSearchDefinition(
233224
}
234225

235226
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
236-
RenderedFieldDefinition renderedFieldDefinition = null) =>
227+
IBsonSerializer fieldSerializer = null) =>
237228
new(_area.Render());
238229
}
239230

@@ -252,23 +243,14 @@ public InSearchDefinition(
252243
}
253244

254245
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
255-
RenderedFieldDefinition renderedFieldDefinition = null)
246+
IBsonSerializer fieldSerializer = null)
256247
{
257-
IBsonSerializer valueSerializer;
258-
259-
if (_path is SingleSearchPathDefinition<TDocument>)
260-
{
261-
valueSerializer = renderedFieldDefinition!.FieldSerializer switch
262-
{
263-
null => new ArraySerializer<TValue>(BsonSerializer.LookupSerializer<TValue>()),
264-
IBsonArraySerializer => renderedFieldDefinition.FieldSerializer,
265-
_ => new ArraySerializer<TValue>((IBsonSerializer<TValue>)renderedFieldDefinition.FieldSerializer)
266-
};
267-
}
268-
else
248+
var valueSerializer = fieldSerializer switch
269249
{
270-
valueSerializer = new ArraySerializer<TValue>(BsonSerializer.LookupSerializer<TValue>());
271-
}
250+
null => new ArraySerializer<TValue>(args.SerializerRegistry.GetSerializer<TValue>()),
251+
IBsonArraySerializer => fieldSerializer,
252+
_ => new ArraySerializer<TValue>((IBsonSerializer<TValue>)fieldSerializer)
253+
};
272254

273255
var document = new BsonDocument();
274256
using var bsonWriter = new BsonDocumentWriter(document);
@@ -293,7 +275,7 @@ public MoreLikeThisSearchDefinition(IEnumerable<TLike> like)
293275
}
294276

295277
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
296-
RenderedFieldDefinition renderedFieldDefinition = null)
278+
IBsonSerializer fieldSerializer = null)
297279
{
298280
var likeSerializer = typeof(TLike) switch
299281
{
@@ -323,7 +305,7 @@ public NearSearchDefinition(
323305
}
324306

325307
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
326-
RenderedFieldDefinition renderedFieldDefinition = null) =>
308+
IBsonSerializer fieldSerializer = null) =>
327309
new()
328310
{
329311
{ "origin", _origin },
@@ -348,7 +330,7 @@ public PhraseSearchDefinition(
348330
}
349331

350332
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
351-
RenderedFieldDefinition renderedFieldDefinition = null) =>
333+
IBsonSerializer fieldSerializer = null) =>
352334
new()
353335
{
354336
{ "query", _query.Render() },
@@ -369,7 +351,7 @@ public QueryStringSearchDefinition(FieldDefinition<TDocument> defaultPath, strin
369351
}
370352

371353
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
372-
RenderedFieldDefinition renderedFieldDefinition = null) =>
354+
IBsonSerializer fieldSerializer = null) =>
373355
new()
374356
{
375357
{ "defaultPath", _defaultPath.Render(args) },
@@ -392,23 +374,14 @@ public RangeSearchDefinition(
392374
}
393375

394376
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
395-
RenderedFieldDefinition renderedFieldDefinition = null)
377+
IBsonSerializer fieldSerializer = null)
396378
{
397-
IBsonSerializer valueSerializer;
398-
399-
if (_path is SingleSearchPathDefinition<TDocument>)
379+
var valueSerializer = fieldSerializer switch
400380
{
401-
valueSerializer = renderedFieldDefinition!.FieldSerializer switch
402-
{
403-
null => BsonSerializer.LookupSerializer<TValue>(),
404-
IBsonArraySerializer => ArraySerializerHelper.GetItemSerializer(renderedFieldDefinition.FieldSerializer),
405-
_ => renderedFieldDefinition.FieldSerializer
406-
};
407-
}
408-
else
409-
{
410-
valueSerializer = BsonSerializer.LookupSerializer<TValue>();
411-
}
381+
null => args.SerializerRegistry.GetSerializer<TValue>(),
382+
IBsonArraySerializer => ArraySerializerHelper.GetItemSerializer(fieldSerializer),
383+
_ => fieldSerializer
384+
};
412385

413386
var document = new BsonDocument();
414387
using var bsonWriter = new BsonDocumentWriter(document);
@@ -447,7 +420,7 @@ public RegexSearchDefinition(
447420
}
448421

449422
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
450-
RenderedFieldDefinition renderedFieldDefinition = null) =>
423+
IBsonSerializer fieldSerializer = null) =>
451424
new()
452425
{
453426
{ "query", _query.Render() },
@@ -466,7 +439,7 @@ public SpanSearchDefinition(SearchSpanDefinition<TDocument> clause)
466439
}
467440

468441
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
469-
RenderedFieldDefinition renderedFieldDefinition = null) =>
442+
IBsonSerializer fieldSerializer = null) =>
470443
_clause.Render(args);
471444
}
472445

@@ -490,7 +463,7 @@ public TextSearchDefinition(
490463
}
491464

492465
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
493-
RenderedFieldDefinition renderedFieldDefinition = null) =>
466+
IBsonSerializer fieldSerializer = null) =>
494467
new()
495468
{
496469
{ "query", _query.Render() },
@@ -516,7 +489,7 @@ public WildcardSearchDefinition(
516489
}
517490

518491
private protected override BsonDocument RenderArguments(RenderArgs<TDocument> args,
519-
RenderedFieldDefinition renderedFieldDefinition = null) =>
492+
IBsonSerializer fieldSerializer = null) =>
520493
new()
521494
{
522495
{ "query", _query.Render() },

src/MongoDB.Driver/Search/SearchDefinition.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
*/
1515

1616
using MongoDB.Bson;
17+
using MongoDB.Bson.Serialization;
1718
using MongoDB.Driver.Core.Misc;
1819

1920
namespace MongoDB.Driver.Search
@@ -160,7 +161,7 @@ public override BsonDocument Render(RenderArgs<TDocument> args)
160161
{
161162
// Special case for SingleSearchPathDefinition in order to avoid rendering the path twice
162163
var (renderedPath, renderedField) = _path.GetRenderedFieldAndStringPath(singleSearchPathDefinition.Field, args);
163-
renderedArgs = RenderArguments(args, renderedField);
164+
renderedArgs = RenderArguments(args, renderedField.FieldSerializer);
164165
renderedArgs.Add("path", renderedPath);
165166
}
166167
else
@@ -174,6 +175,6 @@ public override BsonDocument Render(RenderArgs<TDocument> args)
174175
}
175176

176177
private protected virtual BsonDocument RenderArguments(RenderArgs<TDocument> args,
177-
RenderedFieldDefinition renderedFieldDefinition = null) => new();
178+
IBsonSerializer fieldSerializer = null) => new();
178179
}
179180
}

0 commit comments

Comments
 (0)