Здравствуйте, 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 и попробуйте погонять тесты под отладчиком.