Currently, Table instances are created by DatabaseInfoUtility. This does not allow a custom implementation of IDatabaseInfo to return derived versions of Table that include more information. re-store, for example, could return a MappedTable instance that holds information about the ClassDefinition representing the table.
That information would be useful if the O/R mapper or an application extended the SQL generation backend.
This feature therefore restructures IDatabaseInfo so that generation of Tables, Columns, etc. is performed by IDatabaseInfo instead of DatabaseInfoUtility. In addition, re-store's re-linq implementation is changed to return MappedTable instances.
Currently, applications extending SqlGeneratorBase can return their own implementations of IWhereBuilder, ISelectBuilder, and so on. However, the factory methods creating those implementations only receive a very limited set of context information.
In addition, the existing implementations of WhereBuilder, SelectBuilder, etc. only have a single method (BuildWherePart, BuildSelectPart, etc.) that can't really be reused in a fine-grained manner.
As a third problem for custom SQL generation, subqueries will always result in an "InlineSqlServerGenerator" being created, so a customized SQL generator will never be used for subqueries.
This feature changes the signatures of IWhereBuilder, ISelectBuilder, and so on to receive more context (SqlGenerationData), it makes the implementations of WhereBuilder, SelectBuilder, etc. more suitable for fine-grained reuse, and it adds a new API (CreateNewSqlGenerator) that is used to get a new SQL generator for inline SQL.