SQLite C++ wrapper
От: PM  
Дата: 24.11.04 09:51
Оценка: 42 (4)
Обертка на C++ для sqlite. Создана в духе библиотеки SOCI от Maciej Sobczak.
Интенсивно не тестировалась, наверняка баги присутствуют
Брать здесь
Re: SQLite C++ wrapper
От: MarW https://www.wincatalog.com
Дата: 24.11.04 10:40
Оценка:
Здравствуйте, PM, Вы писали:

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

Судя по примеру очень круто. Особенно впечатлила возможность вот таких запросов:
    statement s(db);
    // fetch records from some_table
    s << "select id, name, salary from some_table", into(id, "id"), 
        into(name, "name"), into(salary, "salary");
    count = 0;
    while ( s.exec() )
    {
    //...
    }

Только не могу понять как это работает. Где и как вы разбираете конструкции into и use?
WinCatalog — Disk Catalog Software for Windows
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 и попробуйте погонять тесты под отладчиком.
Re: SQLite C++ wrapper
От: Рома Мик Россия http://romamik.com
Дата: 10.02.05 19:47
Оценка: 6 (1)
Здравствуйте, PM, Вы писали:

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

PM>Брать здесь
PM>Интенсивно не тестировалась, наверняка баги присутствуют
Угу, присутсвуют. А именно: если вот конструктор session(std::string const& file_name) вызвать с плохим именем базы, то кинется исключение и деструктор не будет вызван. А следовательно и не будет вызвана функция sqlite3_close, а это надо делать, даже если sqlite3_open вернула ошибку.
Janus 1.1.4 beta 4 rev. 314
Re[2]: SQLite C++ wrapper
От: PM  
Дата: 11.02.05 06:26
Оценка:
Здравствуйте, Рома Мик, Вы писали:

> PM>Интенсивно не тестировалась, наверняка баги присутствуют

> Угу, присутсвуют. А именно: если вот конструктор session(std::string
> const& file_name) вызвать с плохим именем базы, то кинется исключение и
> деструктор не будет вызван. А следовательно и не будет вызвана функция
> sqlite3_close, а это надо делать, даже если sqlite3_open вернула ошибку.

Хм. Достаточно странное поведение со стороны SQLite
К сожалению, до понедельника наврядли удастся поэкспериментировать
(выходные уже запланированы ) так что пока сказать ничего определенного
не смогу. В любом случае спасибо за информацию, приму к сведению.

--
foobar2000 v0.8.3: выключен.
Re[3]: SQLite C++ wrapper
От: Рома Мик Россия http://romamik.com
Дата: 11.02.05 09:53
Оценка:
Здравствуйте, PM, Вы писали:

PM>Хм. Достаточно странное поведение со стороны SQLite

Я так понял, что это сделано, чтобы errcode и errmsg работали. В любом случае это четко написано в документации.
Janus 1.1.4 beta 4 rev. 314
Re: SQLite C++ wrapper
От: PM  
Дата: 15.02.05 05:53
Оценка:
Здравствуйте, PM, Вы писали:

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

PM>Интенсивно не тестировалась, наверняка баги присутствуют
PM>Брать здесь

Произошли небольшие изменения: классы теперь лежат в пространстве имен sqlitepp, избавился от лишних выделений динамической памяти и boost::shared_ptr, соответственно. Исправлен баг, замеченный Миклашевским Романом.

Новая версия лежит там же.
Re[2]: SQLite C++ wrapper
От: Mamut Швеция http://dmitriid.com
Дата: 16.02.05 08:58
Оценка:
PM>Новая версия лежит там же.

Какие условия использования? Public Domain, GPL, LGPL, CPL или что-нибудь еще?
... << RSDN@Home 1.1.4 beta 4 rev. 0>> ... <<Winamp is playing "Что играет? Где играет? Где ВинАмп, я вас спрашиваю?">> ...


dmitriid.comGitHubLinkedIn
Re[3]: SQLite C++ wrapper
От: PM  
Дата: 16.02.05 09:21
Оценка:
Здравствуйте, Mamut, Вы писали:

> PM>Новая версия лежит там же <http://gzip.rsdn.ru/File/7790/sqlitepp.zip&gt;.

> Какие условия использования? Public Domain, GPL, LGPL, CPL или
> что-нибудь еще?

Use, modification and distribution is subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)


--
foobar2000 v0.8.3: выключен.
Re: SQLite C++ wrapper
От: Рома Мик Россия http://romamik.com
Дата: 19.02.05 09:23
Оценка:
Здравствуйте, PM, Вы писали:

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

PM>Интенсивно не тестировалась, наверняка баги присутствуют
PM>Брать здесь

Еще могу заметить, что sqlite3_errmsg возвращает куда более информативный текст, чем тот, что отдает еxception. В идеале неплохо бы помнить и то и другое, а еще и и запрос, который вызвал ошибку, т.к. иначе возможности отладки не очень хорошие.
Janus 1.1.4 beta 4 rev. 314
Re[2]: SQLite C++ wrapper
От: PM  
Дата: 21.02.05 07:05
Оценка:
Здравствуйте, Рома Мик, Вы писали:

> Еще могу заметить, что sqlite3_errmsg возвращает куда более

> информативный текст, чем тот, что отдает еxception. В идеале неплохо бы
> помнить и то и другое, а еще и и запрос, который вызвал ошибку, т.к.
> иначе возможности отладки не очень хорошие.
Да это так, вообще обработка ошибко пока недостаточно продумана

--
foobar2000 v0.8.3: 03. Prodigy — Voodoo People [Exclusive Edition:
Everybody In The Place/Selected Mixes] (пауза)
Re[3]: SQLite C++ wrapper
От: Ant K  
Дата: 24.02.05 10:47
Оценка:
Здравствуйте, PM, Вы писали:

PM>Здравствуйте, Рома Мик, Вы писали:


>> Еще могу заметить, что sqlite3_errmsg возвращает куда более

>> информативный текст, чем тот, что отдает еxception. В идеале неплохо бы
>> помнить и то и другое, а еще и и запрос, который вызвал ошибку, т.к.
>> иначе возможности отладки не очень хорошие.
PM>Да это так, вообще обработка ошибко пока недостаточно продумана

Я просто добавил в session функцию, возвращающую результат sqlite3_errmsg,
да определил пару доп. членов в exception для хранения ошибки/запроса.
Ну, и конструктор(ы) там чуток изменил для их инициализации, и ф-цию what()...
Дальнейшее совсем просто, благо throw там не так много...

PS: PM, очень правильная получилась библиотека, спасибо!!
Re[4]: SQLite C++ wrapper
От: PM  
Дата: 25.02.05 07:09
Оценка:
Здравствуйте, Ant K, Вы писали:
> PM>Да это так, вообще обработка ошибко пока недостаточно продумана
>
> Я просто добавил в session функцию, возвращающую результат sqlite3_errmsg,
> да определил пару доп. членов в exception для хранения ошибки/запроса.
> Ну, и конструктор(ы) там чуток изменил для их инициализации, и ф-цию
> what()...
> Дальнейшее совсем просто, благо throw там не так много...
Отлично, я давно собирался этл сделать Может быть стоит выложить сюда diffы исправлений?
> PS: PM, очень правильная получилась библиотека, спасибо!!
Пожалуйста, только помните, что тестировалась она очень мало
--
foobar2000 v0.8.3: 10. Paul Oakenfold — Motion (feat. Grant Lee Phil.. [Bunkka]
Re[5]: SQLite C++ wrapper
От: Ant K  
Дата: 28.02.05 07:36
Оценка:
Здравствуйте, PM, Вы писали:

PM>Отлично, я давно собирался этл сделать Может быть стоит выложить сюда diffы исправлений?

Запросто. Сегодня-завтра выложу...
Re[5]: SQLite C++ wrapper
От: Ant K  
Дата: 02.03.05 13:23
Оценка: 6 (1)
Здравствуйте, PM, Вы писали:

PM>Отлично, я давно собирался этл сделать Может быть стоит выложить сюда diffы исправлений?

diffы здесь
PM>Пожалуйста, только помните, что тестировалась она очень мало
Да, нашлась ошибочка в transaction::exec_sql (см.).
Re: SQLite C++ wrapper (альтернативы)
От: Аноним  
Дата: 09.03.05 09:11
Оценка:
Кто нибудь сравнивал враппер сабжевый с CppSQLite &mdash; C++ Wrapper for SQLite? Интересуют преимущества и недостатки одного перед другим.
И сразу другой вопрос: сабж нормально компилируется в VS2003, но при сборке в VS2002 на фрагменте кода из файла tut.h
         template<class Test,class Group>
здесь ->   struct tests_registerer<Test,Group,0>
         {
           static void reg(Group&){};
         };

возникают ошибки:
error C2065: 'Test' : undeclared identifier
error C2065: 'Group' : undeclared identifier
error C2687: cannot define a nested UDT of a template class out of line

Кто может помочь разобраться и пофиксить?
Re[2]: SQLite C++ wrapper (альтернативы)
От: Рома Мик Россия http://romamik.com
Дата: 09.03.05 10:15
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Кто нибудь сравнивал враппер сабжевый с CppSQLite &mdash; C++ Wrapper for SQLite? Интересуют преимущества и недостатки одного перед другим.

Недостатки того класса: слишком тонкий враппер, надо самому вызывать finalize, геморно получать результаты и т.д.
Недостотаки этого класса: мало оттестирован, довольно сложный для неподготовленного взгляда код.

А>И сразу другой вопрос: сабж нормально компилируется в VS2003, но при сборке в VS2002

Ну там компилятор еще почти что шестерошный, так что вряд ли можно что-то сделать, все же до настоящего C++ он не дотягивает.
Janus 1.1.4 beta 4 rev. 335
Re[2]: SQLite C++ wrapper (альтернативы)
От: PM  
Дата: 09.03.05 10:38
Оценка:
Здравствуйте, аноним, Вы писали:

> Кто нибудь сравнивал враппер сабжевый с CppSQLite — C++ Wrapper for

> SQLite <http://codeproject.com/database/CppSQLite.asp&gt;? Интересуют
> преимущества и недостатки одного перед другим.
Думаю, я буду необъективен
Просто разные подходы, вот примерный код для сравнения:

CppSQLite
// open database
CppSQLiteDB db;
db.open("test.db");

// create and fill table
db.execDML("create table emp(no integer primary key, name char(20))");
for (int i = 0; i < 5; i++)
{
     char buf[128];
     sprintf(buf, "insert into emp(name) values('Empname%06d');", i+1);
     db.execDML(buf);
}

// fetch data
CppSQLiteQuery q = db.execQuery("select * from emp");
for ( ; !q.eof(); q.nextRow() )
{
    cout << q.fieldValue(0) << "|" << q.fieldValue(1) << "|" << endl;
}


SQLite++
// open database
session se("test.db");

// create and fill table
se << "create table emp(no integer primary key, name char(20))";
for (int i = 0; i < 5; i++)
{
     se << "insert into emp(name) values('" << "Empname" << i+1 << "')";
}

// fetch data
statement st(se);
int no;
string name;
st << "select * from emp", into(no), into(name);
while ( st )
{
     cout << no << "|" << name;
}


> И сразу другой вопрос: сабж нормально компилируется в VS2003, но при

> сборке в VS2002 на фрагменте кода из файла tut.h
[ошибка поскипана]
> Кто может помочь разобраться и пофиксить?
TUT использует шаблонные техники с которыми VS2002 категорически не дружит.
Выход — не компилировать тестовый проект или сменить компилятор
Я собирал SQLite++ только с gcc 3.2.3 и VS2003, так что более древними компиляторами (типа Visual C++ 6 или gcc 2.x.x)
может и не скомпилироваться.

--
foobar2000 v0.8.3: 07. Jerry Beeks — Flash $ [Nightmares on Wax DJ-KICKS:]
Re[3]: SQLite C++ wrapper (альтернативы)
От: Аноним  
Дата: 09.03.05 14:32
Оценка:
Здравствуйте, PM, Вы писали:

PM>Думаю, я буду необъективен

PM>Просто разные подходы, вот примерный код для сравнения:
Да, спасибо за наглядный сравнительный пример .
Пожалуй, сабжевый враппер стОит потестировать по-конкретнее (чем и займемся )
Re[4]: SQLite C++ wrapper
От: Mamut Швеция http://dmitriid.com
Дата: 22.03.05 15:21
Оценка:
Я, наверное, все же тормоз

Включаю, значить, #include <sqlitepp.hpp>. И в итоге получаю

c:\Mamut\PREREQUISITES\sqlitepp\sqlitepp\statement.hpp(44): error C2664: 'sqlitepp::statement::query_data::query_data(const sqlitepp::string &)' : cannot convert parameter 1 from 'const std::string' to 'const sqlitepp::string &'


Чего-то я не понимаю в этой жизни : )
... << RSDN@Home 1.1.4 beta 4 rev. 0>> ... <<Winamp is playing "Kenji Kawai — 07 Kugutsuuta aratayo ni kamutsudo hite">> ...


dmitriid.comGitHubLinkedIn
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.