Skip to content

Commit 36545e1

Browse files
authored
VS-85: Add Atlas Search basic builders support (#31)
1 parent 866d729 commit 36545e1

File tree

15 files changed

+225
-15
lines changed

15 files changed

+225
-15
lines changed

samples/BasicSample/BasicSample.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
</ItemGroup>
1111

1212
<ItemGroup>
13-
<PackageReference Include="MongoDB.Driver" Version="2.18.0" />
13+
<PackageReference Include="MongoDB.Driver" Version="2.19.0" />
1414
<PackageReference Include="MongoDB.Analyzer" Version="1.1.0" />
1515
</ItemGroup>
1616

samples/BasicSample/BuildersSample.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,19 @@ namespace BasicSample
2020
{
2121
public class BuildersSample
2222
{
23+
public void AtlasSearch()
24+
{
25+
var mongoClient = new MongoClient(@"mongodb://localhost:27017");
26+
var db = mongoClient.GetDatabase("testdb");
27+
var moviesCollection = db.GetCollection<Movie>("movies");
28+
29+
// Search definition (analyzer provides mql as information message)
30+
var searchTitle = Builders<Movie>.Search.Wildcard(p => p.Title, "Green D*");
31+
32+
// MQL is displayed for 'searchTitle' variables
33+
moviesCollection.Aggregate().Search(searchTitle);
34+
}
35+
2336
public async Task<List<Movie>> GetMovies(double minScore, Genre genre, string titleSearchTerm)
2437
{
2538
var mongoClient = new MongoClient(@"mongodb://localhost:27017");

src/MongoDB.Analyzer.Helpers/Builders/Renderer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
namespace MongoDB.Analyzer.Helpers.Builders
1919
{
20-
public static class Renderer
20+
public static partial class Renderer
2121
{
2222
public static string Render<T>(FilterDefinition<T> filterDefinition)
2323
{
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Copyright 2021-present MongoDB Inc.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License")
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
using MongoDB.Bson.Serialization;
16+
using MongoDB.Driver.Search;
17+
18+
namespace MongoDB.Analyzer.Helpers.Builders
19+
{
20+
public static partial class Renderer
21+
{
22+
public static string Render<T>(SearchDefinition<T> searchDefinition)
23+
{
24+
var renderedBuildersDefinition = searchDefinition.Render(BsonSerializer.LookupSerializer<T>(), BsonSerializer.SerializerRegistry);
25+
return renderedBuildersDefinition.ToString();
26+
}
27+
}
28+
}

src/MongoDB.Analyzer.Helpers/MongoDB.Analyzer.Helpers.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</PropertyGroup>
77

88
<ItemGroup>
9-
<PackageReference Include="MongoDB.Driver" Version="2.14.0-beta1" />
9+
<PackageReference Include="MongoDB.Driver" Version="2.19.0" />
1010
</ItemGroup>
1111

1212
</Project>

src/MongoDB.Analyzer/Core/Builders/AnalysisCodeGenerator.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@ namespace MongoDB.Analyzer.Core.Builders;
2020
internal static class AnalysisCodeGenerator
2121
{
2222
private static readonly SyntaxTree[] s_helpersSyntaxTrees;
23+
private static readonly SyntaxTree s_renderer_2_19_and_higher;
2324
private static readonly BuildersMqlGeneratorTemplateBuilder.SyntaxElements s_mqlGeneratorSyntaxElements;
2425
private static readonly ParseOptions s_parseOptions;
2526

2627
static AnalysisCodeGenerator()
2728
{
2829
s_helpersSyntaxTrees = GetCommonCodeResources(ResourceNames.Builders.Renderer);
30+
s_renderer_2_19_and_higher = GetCodeResource(ResourceNames.Builders.Renderer_2_19_and_higher);
2931

3032
var mqlGeneratorSyntaxTree = GetCodeResource(ResourceNames.Builders.MqlGenerator);
3133
s_mqlGeneratorSyntaxElements = BuildersMqlGeneratorTemplateBuilder.CreateSyntaxElements(mqlGeneratorSyntaxTree);
@@ -50,6 +52,11 @@ public static CompilationResult Compile(MongoAnalyzerContext context, Expression
5052
mqlGeneratorSyntaxTree
5153
};
5254

55+
if (referencesContainer.Version >= BuildersAnalysisConstants.Version_2_19_and_higher)
56+
{
57+
syntaxTrees.Add(s_renderer_2_19_and_higher);
58+
}
59+
5360
var compilation = CSharpCompilation.Create(
5461
BuildersAnalysisConstants.AnalysisAssemblyName,
5562
syntaxTrees,

src/MongoDB.Analyzer/Core/Builders/BuildersAnalysisConstants.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ namespace MongoDB.Analyzer.Core.Builders;
1717
internal static class BuildersAnalysisConstants
1818
{
1919
public const string AnalysisAssemblyName = "DynamicProxyGenAssembly2";
20+
21+
public static readonly Version Version_2_19_and_higher = Version.Parse("2.19.0");
2022
}

src/MongoDB.Analyzer/Core/HelperResources/ResourceNames.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ internal static class Builders
3030
{
3131
public const string MqlGenerator = $"Builders.{nameof(MqlGenerator)}";
3232
public const string Renderer = $"Builders.{nameof(Renderer)}";
33+
public const string Renderer_2_19_and_higher = $"Builders.{nameof(Renderer_2_19_and_higher)}";
3334
}
3435

3536
public const string EmptyCursor = nameof(EmptyCursor);

src/MongoDB.Analyzer/Core/Utilities/SymbolExtensions.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,12 @@ public static bool IsBuilder(this ITypeSymbol typeSymbol) =>
6363
"FilterDefinitionBuilder" or
6464
"IndexKeysDefinitionBuilder" or
6565
"IndexKeysDefinitionExtensions" or
66-
"SortDefinitionBuilder" or
67-
"SortDefinitionExtensions" or
6866
"ProjectionDefinitionBuilder" or
6967
"ProjectionDefinitionExtensions" or
7068
"PipelineDefinitionBuilder" or
69+
"SearchDefinitionBuilder" or
70+
"SortDefinitionBuilder" or
71+
"SortDefinitionExtensions" or
7172
"UpdateDefinitionBuilder" => true,
7273
_ => false
7374
};
@@ -82,9 +83,10 @@ public static bool IsBuilderDefinition(this ITypeSymbol typeSymbol) =>
8283
{
8384
"FilterDefinition" or
8485
"IndexKeysDefinition" or
85-
"SortDefinition" or
8686
"ProjectionDefinition" or
8787
"PipelineDefinition" or
88+
"SearchDefinition" or
89+
"SortDefinition" or
8890
"UpdateDefinition" => true,
8991
_ => false
9092
};

tests/MongoDB.Analyzer.Tests.Common.ClassLibrary/MongoDB.Analyzer.Tests.Common.ClassLibrary.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<Import Project="..\MongoDB.Analyzer.Tests.Common\MongoDB.Analyzer.Tests.Common.projitems" Label="Shared" />
99

1010
<ItemGroup>
11-
<PackageReference Include="MongoDB.Driver" Version="2.11.0">
11+
<PackageReference Include="MongoDB.Driver" Version="2.19.0">
1212
<ExcludeAssets>runtime</ExcludeAssets>
1313
</PackageReference>
1414
</ItemGroup>

0 commit comments

Comments
 (0)