Native query: predicate breadth ($expr renderer + operator long tail)

XMLWordPrintableJSON

    • Type: Task
    • Resolution: Done
    • Priority: Minor - P4
    • None
    • Affects Version/s: None
    • Component/s: None
    • None
    • Dotnet Drivers
    • Not Needed
    • None
    • None
    • None
    • None
    • None
    • None

      Sub-project 2 of the native LINQ query provider rebuild (epic EF-322), built on top of sub-project 1 (EF-323). Broaden the native translator's predicate support beyond the SP1 parity set.

      Scope

      • In: the $expr renderer for filter predicates, plus the operator long tail — comparison / logical / arithmetic / string / null-handling / type operators that don't fit the simple $match equality form SP1 covered.
      • Out (later sub-projects): projection pushdown ($project), scalar cardinality (Count/First/Any/aggregates), collection / nested / filtered Includes, GroupBy / SelectMany / set ops / Distinct / OfType / VectorSearch, non-canonical paging, the per-row double-pass materializer fix.

      Approach

      • Extend the SP1 query AST → stage IR → BsonDocument[] lowering with an $expr-based predicate renderer.
      • Driver-LINQ stays the gated fallback: predicates the native renderer can't yet express fall back deterministically at compile time, no regressions.

      Acceptance

      • Zero regressions: full FunctionalTests + SpecificationTests green in Native mode on EF10 and EF8.
      • Strict-mode native coverage grows vs SP1 as more predicates translate natively.
      • New unit tests for rendered MQL of each operator, including parameterized-binding correctness.

      Design docs

      • Program: 2026-06-23-native-query-provider-design.md / 2026-06-23-native-query-provider-overview.md (sub-project 2).

            Assignee:
            Arthur Vickers
            Reporter:
            Arthur Vickers
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: