Skip to content

Commit 547570b

Browse files
committed
CSHARP-3314: Add a Create factory method to TranslationContext.
1 parent 057c592 commit 547570b

File tree

8 files changed

+22
-27
lines changed

8 files changed

+22
-27
lines changed

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ internal override BsonValue TranslateExpressionToAggregateExpression<TSource, TR
4646
IBsonSerializerRegistry serializerRegistry,
4747
ExpressionTranslationOptions translationOptions)
4848
{
49-
var context = new TranslationContext();
49+
var context = TranslationContext.Create(expression, sourceSerializer);
5050
var translation = ExpressionToAggregationExpressionTranslator.TranslateLambdaBody(context, expression, sourceSerializer, asRoot: true);
5151
var simplifiedAst = AstSimplifier.Simplify(translation.Ast);
5252

@@ -70,7 +70,7 @@ internal override RenderedFieldDefinition TranslateExpressionToField<TDocument>(
7070
IBsonSerializerRegistry serializerRegistry)
7171
{
7272
var parameter = expression.Parameters.Single();
73-
var context = new TranslationContext();
73+
var context = TranslationContext.Create(expression, documentSerializer);
7474
var symbol = context.CreateSymbol(parameter, documentSerializer, isCurrent: true);
7575
context = context.WithSymbol(symbol);
7676
var field = ExpressionToFilterFieldTranslator.Translate(context, expression.Body);
@@ -85,7 +85,7 @@ internal override RenderedFieldDefinition<TField> TranslateExpressionToField<TDo
8585
bool allowScalarValueForArrayField)
8686
{
8787
var parameter = expression.Parameters.Single();
88-
var context = new TranslationContext();
88+
var context = TranslationContext.Create(expression, documentSerializer);
8989
var symbol = context.CreateSymbol(parameter, documentSerializer, isCurrent: true);
9090
context = context.WithSymbol(symbol);
9191
var field = ExpressionToFilterFieldTranslator.Translate(context, expression.Body);
@@ -102,7 +102,7 @@ internal override BsonDocument TranslateExpressionToFilter<TDocument>(
102102
IBsonSerializer<TDocument> documentSerializer,
103103
IBsonSerializerRegistry serializerRegistry)
104104
{
105-
var context = new TranslationContext();
105+
var context = TranslationContext.Create(expression, documentSerializer);
106106
var filter = ExpressionToFilterTranslator.TranslateLambda(context, expression, documentSerializer);
107107

108108
return filter.Render().AsBsonDocument;
@@ -134,7 +134,7 @@ internal override RenderedProjectionDefinition<TOutput> TranslateExpressionToPro
134134
IBsonSerializerRegistry serializerRegistry,
135135
ExpressionTranslationOptions translationOptions)
136136
{
137-
var context = new TranslationContext();
137+
var context = TranslationContext.Create(expression, inputSerializer);
138138
var translation = ExpressionToAggregationExpressionTranslator.TranslateLambdaBody(context, expression, inputSerializer, asRoot: true);
139139
var (projectStage, projectionSerializer) = ProjectionHelper.CreateProjectStage(translation);
140140
var simplifiedProjectStage = AstSimplifier.Simplify(projectStage);

src/MongoDB.Driver/Linq/Linq3Implementation/Translators/ExpressionToExecutableQueryTranslators/ExpressionToExecutableQueryTranslator.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ public static ExecutableQuery<TDocument, IAsyncCursor<TOutput>> Translate<TDocum
3030
{
3131
expression = PartialEvaluator.EvaluatePartially(expression);
3232

33-
var knownSerializersRegistry = KnownSerializerFinder.FindKnownSerializers(expression, (IBsonDocumentSerializer)provider.CollectionDocumentSerializer);
34-
var context = new TranslationContext(knownSerializersRegistry);
33+
var context = TranslationContext.Create(expression, provider.CollectionDocumentSerializer);
3534
var pipeline = ExpressionToPipelineTranslator.Translate(context, expression);
3635

3736
return ExecutableQuery.Create(
@@ -45,8 +44,7 @@ public static ExecutableQuery<TDocument, TResult> TranslateScalar<TDocument, TRe
4544
{
4645
expression = PartialEvaluator.EvaluatePartially(expression);
4746

48-
var knownSerializersRegistry = KnownSerializerFinder.FindKnownSerializers(expression, (IBsonDocumentSerializer)provider.CollectionDocumentSerializer);
49-
var context = new TranslationContext(knownSerializersRegistry);
47+
var context = TranslationContext.Create(expression, provider.CollectionDocumentSerializer);
5048
var methodCallExpression = (MethodCallExpression)expression;
5149
switch (methodCallExpression.Method.Name)
5250
{

src/MongoDB.Driver/Linq/Linq3Implementation/Translators/TranslationContext.cs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,21 @@ namespace MongoDB.Driver.Linq.Linq3Implementation.Translators
2424
{
2525
internal class TranslationContext
2626
{
27+
#region static
28+
public static TranslationContext Create(Expression expression, IBsonSerializer serializer)
29+
{
30+
var symbolTable = new SymbolTable();
31+
var nameGenerator = new NameGenerator();
32+
var knownSerializersRegistry = KnownSerializerFinder.FindKnownSerializers(expression, (IBsonDocumentSerializer)serializer);
33+
return new TranslationContext(symbolTable, nameGenerator, knownSerializersRegistry);
34+
}
35+
#endregion
36+
2737
// private fields
2838
private readonly KnownSerializersRegistry _knownKnownSerializersRegistry;
2939
private readonly NameGenerator _nameGenerator;
3040
private readonly SymbolTable _symbolTable;
3141

32-
// constructors
33-
public TranslationContext()
34-
: this(new SymbolTable(), new NameGenerator(), new KnownSerializersRegistry())
35-
{
36-
}
37-
38-
public TranslationContext(KnownSerializersRegistry knownSerializersRegistry)
39-
: this(new SymbolTable(), new NameGenerator(), knownSerializersRegistry)
40-
{
41-
}
42-
4342
private TranslationContext(SymbolTable symbolTable, NameGenerator nameGenerator, KnownSerializersRegistry knownSerializersRegistry)
4443
{
4544
_symbolTable = Ensure.IsNotNull(symbolTable, nameof(symbolTable));

tests/MongoDB.Driver.Tests/Linq/Linq2ImplementationTestsOnLinq3/Translators/AggregateGroupTranslatorTests.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -554,8 +554,7 @@ private ProjectedResult<TResult> Group<TKey, TResult>(Expression<Func<Root, TKey
554554
.Select(groupProjector);
555555

556556
var collectionSerializer = (IBsonDocumentSerializer)BsonSerializer.LookupSerializer<Root>();
557-
var knownSerializersRegistry = KnownSerializerFinder.FindKnownSerializers(queryable.Expression, collectionSerializer);
558-
var context = new TranslationContext(knownSerializersRegistry);
557+
var context = TranslationContext.Create(queryable.Expression, collectionSerializer);
559558
var pipeline = ExpressionToPipelineTranslator.Translate(context, queryable.Expression);
560559
pipeline = AstPipelineOptimizer.Optimize(pipeline);
561560

tests/MongoDB.Driver.Tests/Linq/Linq2ImplementationTestsOnLinq3/Translators/LegacyPredicateTranslatorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1183,7 +1183,7 @@ private void Assert<TDocument>(Expression<Func<TDocument, bool>> expression, int
11831183

11841184
var parameter = expression.Parameters.Single();
11851185
var serializer = BsonSerializer.LookupSerializer<TDocument>();
1186-
var context = new TranslationContext();
1186+
var context = TranslationContext.Create(expression, serializer);
11871187
var symbol = context.CreateSymbol(parameter, serializer, isCurrent: true);
11881188
context = context.WithSymbol(symbol);
11891189
var filterAst = ExpressionToFilterTranslator.Translate(context, expression.Body);

tests/MongoDB.Driver.Tests/Linq/Linq2ImplementationTestsOnLinq3/Translators/PredicateTranslatorTests.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1159,8 +1159,7 @@ public List<TDocument> Assert<TDocument>(IMongoCollection<TDocument> collection,
11591159

11601160
var serializer = BsonSerializer.SerializerRegistry.GetSerializer<TDocument>();
11611161
var parameter = filter.Parameters.Single();
1162-
var knownSerializersRegistry = KnownSerializerFinder.FindKnownSerializers(filter, (IBsonDocumentSerializer)serializer);
1163-
var context = new TranslationContext(knownSerializersRegistry);
1162+
var context = TranslationContext.Create(filter, serializer);
11641163
var symbol = context.CreateSymbol(parameter, serializer, isCurrent: true);
11651164
context = context.WithSymbol(symbol);
11661165
var filterAst = ExpressionToFilterTranslator.Translate(context, filter.Body);

tests/MongoDB.Driver.Tests/Linq/Linq3ImplementationTests/Jira/CSharp1585Tests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public void Nested_Any_should_translate_correctly()
3838
var parameter = expression.Parameters[0];
3939
var serializerRegistry = BsonSerializer.SerializerRegistry;
4040
var documentSerializer = serializerRegistry.GetSerializer<Document>();
41-
var context = new TranslationContext();
41+
var context = TranslationContext.Create(expression, documentSerializer);
4242
var symbol = context.CreateSymbol(parameter, documentSerializer, isCurrent: true);
4343
context = context.WithSymbol(symbol);
4444
var filter = ExpressionToFilterTranslator.Translate(context, expression.Body, exprOk: false);

tests/MongoDB.Driver.Tests/Linq/Linq3ImplementationTests/Translators/ExpressionToFilterTranslators/ExpressionTranslators/ModuloComparisonExpressionToFilterTranslatorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ private void Assert(AstFilter result, string path, BsonValue divisor, BsonValue
184184
private TranslationContext CreateContext(ParameterExpression parameter)
185185
{
186186
var serializer = BsonSerializer.LookupSerializer(parameter.Type);
187-
var context = new TranslationContext();
187+
var context = TranslationContext.Create(parameter, serializer);
188188
var symbol = context.CreateSymbol(parameter, serializer, isCurrent: true);
189189
return context.WithSymbol(symbol);
190190
}

0 commit comments

Comments
 (0)