Re[2]: SQLite C++ wrapper
От: PM  
Дата: 24.11.04 15:43
Оценка:
Здравствуйте, MarW, Вы писали:

PM>>Обертка на C++ для sqlite. Создана в духе библиотеки SOCI от Maciej Sobczak.

MW>Судя по примеру очень круто. Особенно впечатлила возможность вот таких запросов:

MW>
MW>    statement s(db);
MW>    // fetch records from some_table
MW>    s << "select id, name, salary from some_table", into(id, "id"), 
MW>        into(name, "name"), into(salary, "salary");
MW>    count = 0;
MW>    while ( s.exec() )
MW>    {
MW>    //...
MW>    }
MW>

MW>Только не могу понять как это работает. Где и как вы разбираете конструкции into и use?

statement::operator << возвращает временный объект типа prepare_info. В prepare_info имеется парочка operator , (into_holder_ptr) и operator , (into_holder_ptr), которые добавлют создаваемые функциями into и use объекты into_holder_base и use_holder_base во внутренние списки statement.

Так как временный объект, созданный statement::operator << живет лишь до конца выражения, то в его деструкторе можно делать обработку данных. Реально происходит только сохранение запроса (statement::set_query()), а привязка into- и uses-ссылок происходит при первом вызове statement::exec
Если у SQL оператора есть результат (у select, например), то производится обновление into-ссылок.

Примерно так и работает. Запутанно как-то объяснил Поставте точки останова на statement::prepare и statement::exec и попробуйте погонять тесты под отладчиком.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.