Building an IQueryable Relational Algebra Provider

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:

  • Selection
  • Projection
  • Join

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.