Здравствуйте, VTT, Вы писали:
VTT>Как я понимаю, основной профит в автоматической генерации строчки SQL запроса?
VTT>Или в избавлении от
VTT>VTT>
VTT>?
И в том, и в другом. То есть было:
auto handwritten()
{
using namespace CTQL;
struct Row
{
double value;
int id;
int number;
} row;
vector_noinline<Row> xs;
dummy_db db;
db.execute("SELECT foo.value, foo.id, foo.number FROM foo WHERE foo.id>42");
auto count = db.read_count();
xs.reserve(count);
for(unsigned i=0; i!=count; ++i, db.move_to_next())
{
row.value = db.get<double>(0);
row.id = db.get<int>(1);
row.number = db.get<int>(2);
xs.push_back(row);
}
return xs;
}
Стало:
to_vector( from(foo).where(foo.id > 42_i).select(foo.value, foo.id, foo.number) )
При этом ассемблерный код не изменился.
Плюс возможности по декомпозиции:
* итоговый запрос может собираться в разных частях программы
* повторяемые куски разных запросов могут быть вынесены и многократно переиспользованны.
Плюс оптимизация запросов (последний пример исходного сообщения). Плюс поддержка особенностей разных СУБД, и целевых оптимизаций под них.
Плюс, конечно же, типизация.