Open
Description
This issue tracks longer-term, architectural changes to the query pipeline.
Issues completed in 9.0 are visible in #31327.
Done
- Represent query parameters with a dedicated type instead of ParameterExpression #35089
- Consider simplifying SQL parameter names (
@__city_0
->@city
) #35113 - Introduce a safer mechanism for accessing parameters and disabling SQL caching #36266
Small/localized cleanups
- Reference IColumnBase (relational model) from ColumnExpression #36231
- Make SqlNullabilityProcessor into a real ExpressionVisitor #34696
- Rewrite SearchConditionConverter #34905
- Simplify away NonQueryExpression #34768
Planned
- Stop remapping lambda bodies to deal with parameters #35038
- Stop referencing the query from ProjectionBindingExpression in the shaper #32980
- Make our SQL tree fully immutable #32927
Backlog
- Use inheritance instead of annotations for TableExpressionBase (specifically temporal tables) #33044
- Query: Re-evaluate concept of pending selector in nav expansion #20291
- Consider having a relational expression representing OPENJSON, json_each and so on #32576
- Stop referencing SelectExpression
_projectionBindings
(and similar) from shaper - Consider doing property/navigation binding entirely from RelationalSqlTranslatingExpressionVisitor #31309
- Consider introducing nullability on SqlExpression #33889
- DRY around getting the projection from ShapedQueryExpression #31015
- Remove SelectExpression private logic out to the translation visitors, making it a minimal, regular expression node #31049
- Query: convert identifiers to be generic SqlExpressions rather than ColumnExpressions #31326
- Query: Pay your (technical) debt on time #18923
- Share optimizations between relational and non-relational providers #34152