Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CSHARP-4955: Add Render overload with RenderArgs #1278

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@
</PackageReference>
</ItemGroup>

<ItemGroup>
<Compile Include="..\MongoDB.Shared\IsExternalInit.cs" Visible="false" />
</ItemGroup>

<ItemGroup>
<None Include="..\..\LICENSE.md" Pack="true" PackagePath="$(PackageLicenseFile)" />
<None Include="..\..\packageIcon.png" Pack="true" PackagePath="" />
Expand Down
5 changes: 3 additions & 2 deletions src/MongoDB.Driver.GridFS/GridFSBucket.cs
Original file line number Diff line number Diff line change
Expand Up @@ -628,8 +628,9 @@ private FindOperation<GridFSFileInfo<TFileId>> CreateFindOperation(FilterDefinit
var filesCollectionNamespace = this.GetFilesCollectionNamespace();
var messageEncoderSettings = this.GetMessageEncoderSettings();
var linqProvider = _database.Client.Settings.LinqProvider;
var renderedFilter = filter.Render(_fileInfoSerializer, _options.SerializerRegistry, linqProvider);
var renderedSort = options.Sort == null ? null : options.Sort.Render(_fileInfoSerializer, _options.SerializerRegistry, linqProvider);
var renderArgs = new RenderArgs<GridFSFileInfo<TFileId>>(_fileInfoSerializer, _options.SerializerRegistry, linqProvider);
var renderedFilter = filter.Render(renderArgs);
var renderedSort = options.Sort == null ? null : options.Sort.Render(renderArgs);

return new FindOperation<GridFSFileInfo<TFileId>>(
filesCollectionNamespace,
Expand Down
5 changes: 2 additions & 3 deletions src/MongoDB.Driver.GridFS/GridFSBucketCompat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
* limitations under the License.
*/

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
Expand Down Expand Up @@ -242,7 +241,7 @@ private IEnumerable<GridFSFileInfo> TransformFileInfos(IEnumerable<GridFSFileInf
private FilterDefinition<GridFSFileInfo<ObjectId>> WrapFilter(FilterDefinition<GridFSFileInfo> filter)
{
var linqProvider = Database.Client.Settings.LinqProvider;
var renderedFilter = filter.Render(GridFSFileInfoSerializer.Instance, BsonSerializer.SerializerRegistry, linqProvider);
var renderedFilter = filter.Render(new(GridFSFileInfoSerializer.Instance, BsonSerializer.SerializerRegistry, linqProvider));
return new BsonDocumentFilterDefinition<GridFSFileInfo<ObjectId>>(renderedFilter);
}

Expand All @@ -251,7 +250,7 @@ private GridFSFindOptions<ObjectId> WrapFindOptions(GridFSFindOptions options)
if (options != null)
{
var linqProvider = Database.Client.Settings.LinqProvider;
var renderedSort = options.Sort == null ? null : options.Sort.Render(GridFSFileInfoSerializer.Instance, BsonSerializer.SerializerRegistry, linqProvider);
var renderedSort = options.Sort == null ? null : options.Sort.Render(new(GridFSFileInfoSerializer.Instance, BsonSerializer.SerializerRegistry, linqProvider));
var wrappedSort = renderedSort == null ? null : new BsonDocumentSortDefinition<GridFSFileInfo<ObjectId>>(renderedSort);
return new GridFSFindOptions<ObjectId>
{
Expand Down
25 changes: 18 additions & 7 deletions src/MongoDB.Driver/AggregateExpressionDefinition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,18 @@ public abstract class AggregateExpressionDefinition<TSource, TResult>
/// <param name="serializerRegistry">The serializer registry.</param>
/// <param name="linqProvider">The LINQ provider.</param>
/// <returns>The rendered aggregation expression.</returns>
public abstract BsonValue Render(IBsonSerializer<TSource> sourceSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider);
[Obsolete("Use Render(RenderArgs<TSource> renderArgs) overload instead.")]
public virtual BsonValue Render(IBsonSerializer<TSource> sourceSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
{
return Render(new(sourceSerializer, serializerRegistry, linqProvider));
}

/// <summary>
/// Renders the aggregation expression to a <see cref="BsonValue"/>.
/// </summary>
/// <param name="renderArgs">The render arguments.</param>
/// <returns>A <see cref="BsonValue"/>.</returns>
public abstract BsonValue Render(RenderArgs<TSource> renderArgs);
}

/// <summary>
Expand All @@ -101,7 +112,7 @@ public BsonValueAggregateExpressionDefinition(BsonValue expression)

// public methods
/// <inheritdoc/>
public override BsonValue Render(IBsonSerializer<TSource> sourceSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
public override BsonValue Render(RenderArgs<TSource> renderArgs)
{
return _expression;
}
Expand Down Expand Up @@ -143,10 +154,10 @@ public ExpressionAggregateExpressionDefinition(Expression<Func<TSource, TResult>

// public methods
/// <inheritdoc/>
public override BsonValue Render(IBsonSerializer<TSource> sourceSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
public override BsonValue Render(RenderArgs<TSource> renderArgs)
{
var contextData = _contextData?.With("SerializerRegistry", serializerRegistry);
return linqProvider.GetAdapter().TranslateExpressionToAggregateExpression(_expression, sourceSerializer, serializerRegistry, _translationOptions, contextData);
var contextData = _contextData?.With("SerializerRegistry", renderArgs.SerializerRegistry);
return renderArgs.LinqProvider.GetAdapter().TranslateExpressionToAggregateExpression(_expression, renderArgs.DocumentSerializer, renderArgs.SerializerRegistry, _translationOptions, contextData);
}
}

Expand Down Expand Up @@ -177,9 +188,9 @@ public sealed class DocumentsAggregateExpressionDefinition<TDocument> : Aggregat

// public methods
/// <inheritdoc/>
public override BsonValue Render(IBsonSerializer<NoPipelineInput> sourceSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
public override BsonValue Render(RenderArgs<NoPipelineInput> renderArgs)
{
var documentSerializer = _documentSerializer ?? serializerRegistry.GetSerializer<TDocument>();
var documentSerializer = _documentSerializer ?? renderArgs.SerializerRegistry.GetSerializer<TDocument>();
return SerializationHelper.SerializeValues(documentSerializer, _documents);
}
}
Expand Down
19 changes: 15 additions & 4 deletions src/MongoDB.Driver/AggregateFacet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,25 @@ protected AggregateFacet(string name)
/// <param name="serializerRegistry">The serializer registry.</param>
/// <param name="linqProvider">The LINQ provider.</param>
/// <returns>The rendered pipeline.</returns>
public abstract BsonArray RenderPipeline(IBsonSerializer<TInput> inputSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider);
[Obsolete("Use Render(RenderArgs<TInput> renderArgs) overload instead.")]
public virtual BsonArray RenderPipeline(IBsonSerializer<TInput> inputSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
{
return RenderPipeline(new(inputSerializer, serializerRegistry, linqProvider));
}

/// <summary>
/// Renders the facet pipeline.
/// </summary>
/// <param name="renderArgs">The render arguments.</param>
/// <returns>A <see cref="BsonValue"/>.</returns>
public abstract BsonArray RenderPipeline(RenderArgs<TInput> renderArgs);
}

/// <summary>
/// Represents a facet to be passed to the Facet method.
/// </summary>
/// <typeparam name="TInput">The type of the input documents.</typeparam>
/// <typeparam name="TOutput">The type of the otuput documents.</typeparam>
/// <typeparam name="TOutput">The type of the output documents.</typeparam>
public class AggregateFacet<TInput, TOutput> : AggregateFacet<TInput>
{
/// <summary>
Expand All @@ -112,9 +123,9 @@ public AggregateFacet(string name, PipelineDefinition<TInput, TOutput> pipeline)
public PipelineDefinition<TInput, TOutput> Pipeline { get; private set; }

/// <inheritdoc/>
public override BsonArray RenderPipeline(IBsonSerializer<TInput> inputSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
public override BsonArray RenderPipeline(RenderArgs<TInput> renderArgs)
{
var renderedPipeline = Pipeline.Render(inputSerializer, serializerRegistry, linqProvider);
var renderedPipeline = Pipeline.Render(renderArgs);
return new BsonArray(renderedPipeline.Documents);
}
}
Expand Down
36 changes: 21 additions & 15 deletions src/MongoDB.Driver/ArrayFilterDefinition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@
* limitations under the License.
*/

using System;
using MongoDB.Bson;
using MongoDB.Bson.Serialization;
using MongoDB.Driver.Core.Misc;
using MongoDB.Driver.Linq;
using System;

namespace MongoDB.Driver
{
Expand Down Expand Up @@ -103,7 +103,24 @@ public abstract class ArrayFilterDefinition<TItem> : ArrayFilterDefinition
/// <returns>
/// A <see cref="BsonDocument" />.
/// </returns>
public abstract BsonDocument Render(IBsonSerializer<TItem> itemSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider);
[Obsolete("Use Render(RenderArgs<TSource> renderArgs) overload instead.")]
public virtual BsonDocument Render(IBsonSerializer<TItem> itemSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
{
return Render(new(itemSerializer, serializerRegistry, linqProvider));
}

/// <inheritdoc />
public override BsonDocument Render(IBsonSerializer itemSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
{
return Render(new((IBsonSerializer<TItem>)itemSerializer, serializerRegistry, linqProvider));
}

/// <summary>
/// Renders the array filter to a <see cref="BsonDocument" />.
/// </summary>
/// <param name="renderArgs">The render arguments.</param>
/// <returns> A <see cref="BsonDocument" />.</returns>
public abstract BsonDocument Render(RenderArgs<TItem> renderArgs);
}

/// <summary>
Expand Down Expand Up @@ -136,13 +153,7 @@ public BsonDocumentArrayFilterDefinition(BsonDocument document)

// public methods
/// <inheritdoc />
public override BsonDocument Render(IBsonSerializer itemSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
{
return Render((IBsonSerializer<TItem>)itemSerializer, serializerRegistry, linqProvider);
}

/// <inheritdoc />
public override BsonDocument Render(IBsonSerializer<TItem> itemSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
public override BsonDocument Render(RenderArgs<TItem> renderArgs)
{
return _document;
}
Expand Down Expand Up @@ -187,14 +198,9 @@ public JsonArrayFilterDefinition(string json)
public string Json => _json;

// public methods
/// <inheritdoc />
public override BsonDocument Render(IBsonSerializer itemSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
{
return Render((IBsonSerializer<TItem>)itemSerializer, serializerRegistry, linqProvider);
}

/// <inheritdoc />
public override BsonDocument Render(IBsonSerializer<TItem> itemSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
public override BsonDocument Render(RenderArgs<TItem> renderArgs)
{
return _document;
}
Expand Down
2 changes: 1 addition & 1 deletion src/MongoDB.Driver/ChangeStreamHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ internal static class ChangeStreamHelper
{
var changeStreamDocumentSerializer = new ChangeStreamDocumentSerializer<TDocument>(documentSerializer);
var serializerRegistry = BsonSerializer.SerializerRegistry;
return pipeline.Render(changeStreamDocumentSerializer, serializerRegistry, linqProvider);
return pipeline.Render(new(changeStreamDocumentSerializer, serializerRegistry, linqProvider));
}

private static void SetOperationOptions<TResult>(
Expand Down
2 changes: 1 addition & 1 deletion src/MongoDB.Driver/ClusteredIndexOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public bool Unique
internal BsonDocument Render(IBsonSerializer<TDocument> documentSerializer, IBsonSerializerRegistry serializerRegistry)
{
return new BsonDocument {
{ "key", _key.Render(documentSerializer, serializerRegistry) },
{ "key", _key.Render(new(documentSerializer, serializerRegistry)) },
{ "unique", _unique },
{ "name", _name, _name != null }
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -553,7 +553,7 @@ private BsonValue RenderFilter(FilterDefinition<BsonDocument> filter)
{
var registry = BsonSerializer.SerializerRegistry;
var serializer = registry.GetSerializer<BsonDocument>();
return filter.Render(serializer, registry);
return filter.Render(new(serializer, registry));
}

private Guid UnwrapKeyId(RawBsonDocument wrappedKeyDocument)
Expand Down