> If I e.g. look at MongoDBDatastoreProvider before this change, it basically deals with managing the database (starting, stopping), while all the logic for data fetching, updating etc. is implemented in MongoDBDialect. Executing a query seems to fall into the latter category to me.

I guess I was thinking more about the Neo4j case, my idea was to make the dialect in a way that could be reused with different datastore providers, something similar of what is happening with blueprint.
As long as the datastore provider returns a Node and a Relationship when I need them I don't have to create a new dialect for every new datastore to solve the same problem.

In some way is similar to what blueprints does, I can create a dialect that works with blueprints but "I don't know" which db I'm using using. it might be Neo4j or OrientDB.

This is the idea that I have in mind, but it might not be achievable.
Now that I see it, maybe it's not very nice for the DatastoreProvider to have a dependency with ```Tuple```.

> Another question: Do we actually need the session parameter? It is not used in the MongoDB implementation and so far DatastoreProvider/GridDialect don't seem to interact with the session contract.

I  think it can be removed.