Здравствуйте, IT, Вы писали:
_FR>>На сколько "продвинут"?
_FR>>Требуется инструмент для "кросдатабазной" генереции запросов.
IT>Если имеется ввиду возможность указывать имя базы при указании таблицы, то в наличии соответствующие атрибуты для классов и метод DatabaseName в linq запросе.
Имеется в виду возможность такого псевдокода:
var query = new SelectBuilder();
query.From = new Table("Orders");
query.AddColumn("OrderID");
var commandText = query.ToString(Db.MsSql);
SELECT [OrderID]
FROM [Orders]
То есть создание некоего объекта (по сути AST) и дальнейшая возможность трансляции его в SQL для различных СУБД.
_FR>>Есть ли / можно ли самому добавить поддержку WITH например и оконных функций (с тем, что бы можно было бы определить что определённый провайдер эту возможность не поддерживает)?
IT>Не понял.
Только помимо простейших и наиболее общих вещей нужна широкая поддержка sql:
var cte = new SelectBuilder();
cte.From = new Table("Order Details");
cte.AddColumns("OrderID", "ProductID");
var column = cte.AddColumn("UnitPrice");
query /* из предыдущего */.AddWith(cte);
query.AddJoin(cte, query["OrderID"], Sql.Equals, cte["OrderID"]);
query.AddColumn(column);
WITH [CTE Order Details] ([OrderID], [ProductID], [UnitPrice]) AS (
SELECT [OrderID], [ProductID], [UnitPrice]
FROM [Order Details]
)
SELECT [O].[OrderID], [D].[UnitPrice]
FROM [Orders] [O]
JOIN [CTE Order Details] [D] ON [O].[OrderID] = [D].[OrderID];
То есть объектная модель должна поддерживать common table expressions / оконные функции (с атрибутами PARTITION BY / ORDER BY) и прочие "изыски". Быть удобной для сложных манипуляций при построении и изменении объекта-запроса.
_FR>>На сколько вообще разумно использование BLToolkit в таком ракурсе? Может, генерилка sql в нём делалась сторого для нужд ОРМ и всякие SQL-изыски там категорически не к чему?
IT>SQL изыски планируется только расширять.
Ага, вот меня по примерам и подкупила возможность в пользовательском коде вносить расширения (ну так мне по примерам показалось что такая возможность есть для функций / подвыражений).