In the journey of implementing view matching technique for IQueryable, we first need to simplify the language. The only language I am able to implement query optimisation with, is Relational Algebra. What I am going to explore now, is the possibility of implementation of a LINQ relational algebra provider as a common language for every query optimiser and hence, the view matcher I am going to make.
We want to reduce everything down to three relational algebra operation:
Subqueries are also an important topic, but for simplicity let not support it.
Initially we should prepare a framework to convert as much as possible into the above three formats. Then we need to implement some few basic operators:
- Selection: Commutativity, Selection Pushing, Selection Splitting
- Projection: Projection Pushing
- Join: Commutativity, Non-associativity
Let’s leave the details to another post.