Re[2]: BLToolkit как инструмент генерации SQL
От: _FRED_ Черногория
Дата: 08.03.11 15:21
Оценка: 2 (1)
Здравствуйте, 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 изыски планируется только расширять.

Ага, вот меня по примерам и подкупила возможность в пользовательском коде вносить расширения (ну так мне по примерам показалось что такая возможность есть для функций / подвыражений).
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.