MongoFramework icon indicating copy to clipboard operation
MongoFramework copied to clipboard

Custom LINQ engine

Open Turnerj opened this issue 4 years ago • 3 comments

This kick starts the work for #87

Turnerj avatar Nov 05 '19 03:11 Turnerj

Codecov Report

Merging #112 into master will decrease coverage by 4.67%. The diff coverage is 60.64%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master     #112      +/-   ##
==========================================
- Coverage   91.74%   87.07%   -4.68%     
==========================================
  Files          71       78       +7     
  Lines        2496     2932     +436     
  Branches      294      348      +54     
==========================================
+ Hits         2290     2553     +263     
- Misses        134      286     +152     
- Partials       72       93      +21
Impacted Files Coverage Δ
...ure/Mapping/Processors/PropertyMappingProcessor.cs 84.21% <0%> (-5.27%) :arrow_down:
...e/Linq/Translation/Translators/SelectTranslator.cs 10.71% <10.71%> (ø)
...rastructure/Linq/Translation/DefaultTranslators.cs 100% <100%> (ø)
...re/Linq/Translation/Translators/WhereTranslator.cs 100% <100%> (ø)
.../Linq/Translation/Translators/OrderByTranslator.cs 16.66% <16.66%> (ø)
...rk/Infrastructure/Linq/Translation/StageBuilder.cs 45.45% <45.45%> (ø)
...tructure/Linq/Translation/ExpressionTranslation.cs 66.47% <66.47%> (ø)
...frastructure/Linq/Translation/TranslationHelper.cs 71.42% <71.42%> (ø)
... and 5 more

Continue to review full report at Codecov.

Legend - Click here to learn more Δ = absolute <relative> (impact), ø = not affected, ? = missing data Powered by Codecov. Last update 80dd893...dceb2db. Read the comment docs.

codecov[bot] avatar Nov 12 '19 01:11 codecov[bot]

Of note, attempt to support $lookup through custom LINQ engine. This would effectively add support for basic joins between collections.

Turnerj avatar Aug 14 '20 08:08 Turnerj

The process now will be to add the "low hanging fruit" queries like GroupBy etc, then write translators for GeoNear and Text search. Once done, we remove the pre-stage logic as it all will be handled by the new LINQ translator system. The updated GetExecutionModel logic will no longer do any reflection and will retrieve the correct serializer by its own method.

At this point, it is just a matter of weeding out the existing tests to pass, then making sure that each component is adequately tested itself.

Once this is done, the next wave of changes will be writing an optimization layer for queries. This will be done directly with the BsonDocument where it should be easier than with expressions.

Turnerj avatar Dec 10 '20 01:12 Turnerj