Board.KolibriOS.org
http://board.kolibrios.org/

порт SQLite 1.0
http://board.kolibrios.org/viewtopic.php?f=24&t=1163
Page 2 of 4

Author:  diamond [ Fri Oct 31, 2008 9:22 pm ]
Post subject:  Re: порт SQLite 1.0

Quote:
С путем пока не разобрался (в VC для этого, как и для параметров, нужен бубен и немного времени).

Бубна не нужно. В SDK есть две версии программы pe2kos.exe, для создания программ, использующих путь, и не использующих. Просто окончательное преобразование делай первой из них, а сам путь можно получить кодом
Code:
const char* path = *(const char**)0x20;

Author:  barsuk [ Fri Oct 31, 2008 9:28 pm ]
Post subject:  Re: порт SQLite 1.0

diamond wrote:
Бубна не нужно. В SDK есть две версии программы pe2kos.exe, для создания программ, использующих путь, и не использующих.

Спасибо, а я не знал - думал, что самому придется писать :)

Author:  barsuk [ Fri Nov 07, 2008 11:30 pm ]
Post subject:  Re: порт SQLite 1.0

Особого прогресса нет, мешают странные баги.
А именно: при попытке вставить много (хотя бы 100) строк в таблицу возникает ошибка "out of memory", или начинает глючить парсер, ругаясь на верные команды. Иногда (неясно в каких случаях - похоже случайно) случается assertion в btree.c.

Для тестирования добавлена команда benchmark, которая выполняет 100 раз запрос "insert into test values(%d)" - в процессе выполнения которого и происходит ошибка. Таблицу test нужно создать вручную: create table test (k integer).
Если кому интересно - посмотрите, вдруг что найдете :)

Еще никак не удается сделать в VC++ obj-файл, который загружался бы как DLL Kolibri. Чтобы сделать метку EXPORTS использую такой прием: объявляю константу XPORTS, которая экспортируется как _XPORTS и заменяю в hiew на EXPORTS (VC++ не умеет не добавлять подчеркивания).

Attachments:
File comment: сама прога
sqlite-kos-bin.7z [102.48 KiB]
Downloaded 159 times
File comment: исходники
sqlite_kos-src.7z [249.27 KiB]
Downloaded 160 times

Author:  barsuk [ Sat Nov 08, 2008 2:52 am ]
Post subject:  Re: порт SQLite 1.0

По совету diamond'a увеличил стек с 4К до 64К - все работает! :)

Эта версия хранит файлы БД в папке .\sqlite (она должна существовать в папке, где лежит sqlite.kex).

Проведена первая проверка производительности: 1000 вставок 1 целого числа в таблицу делается (под чистой Колибри) за 0.7 сек. Для сравнения: MySQL 5.0 под WinXP за 0.37 сек.

Attachments:
sqlite_kos-0.25-bin.7z [93.8 KiB]
Downloaded 169 times

Author:  vectoroc [ Sat Nov 08, 2008 2:46 pm ]
Post subject:  Re: порт SQLite 1.0

перед началом вставок попробуй начать транзакцию, тогда sqlite должен уделать mysql ;)
статья по теме http://habrahabr.ru/blogs/webdev/42121/

Author:  barsuk [ Sat Nov 08, 2008 3:48 pm ]
Post subject:  Re: порт SQLite 1.0

Действительно, добавление 1000 записей за одну транзакцию из SQLite под Kolibri занимает 0.2 секунды (при расположении базы как на рамдиске, там и на жестком диске). Причина - при каждом сохранении данных SQLite создает файл журнала и модифицирует основной файл базы.
Для MySQL под WinXP транзакция, наоборот, ухудшила результаты до 0.43 сек.

Author:  bw [ Sat Nov 08, 2008 4:08 pm ]
Post subject:  Re: порт SQLite 1.0

В этом смысле MySQL странно себя ведёт, хотя я не замечал снижения скорости работы. Использование транзаций (предположительное добавление записей группой, а не по одной) в PostgreSQL увеличивает скорость "записи" в базу.

..bw

Author:  diamond [ Sat Nov 08, 2008 11:00 pm ]
Post subject:  Re: порт SQLite 1.0

barsuk wrote:
Еще никак не удается сделать в VC++ obj-файл, который загружался бы как DLL Kolibri. Чтобы сделать метку EXPORTS использую такой прием: объявляю константу XPORTS, которая экспортируется как _XPORTS и заменяю в hiew на EXPORTS (VC++ не умеет не добавлять подчеркивания).

Это уже вопрос к нашим ЯВУшникам...

Author:  Serge [ Sun Nov 09, 2008 1:03 am ]
Post subject:  Re: порт SQLite 1.0

А __declspec( dllexport ) не помогает ?

Author:  vectoroc [ Sun Nov 09, 2008 1:08 am ]
Post subject:  Re: порт SQLite 1.0

http://msdn.microsoft.com/en-us/library/bb687850.aspx
3 способа описаны, у меня получилось только последним первым (последним он описан где-то в другом месте) (через .DEF файл)
Пробовал на 2008 студии, сырцы sqlite с ходу собираться не захотели, экспериментировал на "hello world"-программке

Author:  barsuk [ Sun Nov 09, 2008 1:51 am ]
Post subject:  Re: порт SQLite 1.0

vectoroc
Можешь выложить def, который нужно написать и результат (obj-файл)?

Author:  vectoroc [ Sun Nov 09, 2008 3:28 am ]
Post subject:  Re: порт SQLite 1.0

На другом имени проверял.
Если вписываешь EXPORTS, в таблицу подставляется пустая строка.
В МСДН написано, что, чтобы использовать зарезервированные слова в аргументах, эти слова надо заключать в двойные кавычки, но в таком случае в таблицу попадает "EXPORTS" вместе с кавычками :/

Author:  barsuk [ Sun Nov 09, 2008 3:41 am ]
Post subject:  Re: порт SQLite 1.0

Понятно...
Проблема в том, что, даже если вручную в hiew пофиксить _xports на EXPORTS, obj-файл не загружается в качестве DLL. Видимо, VC++ генерит obj-файлы несколько другого формата, чем fasm или что-то в этом роде.

Author:  vectoroc [ Sun Nov 09, 2008 4:04 am ]
Post subject:  Re: порт SQLite 1.0

Эх.. а уж в закромах нашел программку, которая может сама найти симлинк, и подправить его :)
gcc линкует набор ".obj" файлов (COFF) в ".a" файл. Студия наверно поступает подобным же образом, кладёт .obj файлы в ".lib" (кстати, у этого файла в самом начале написано !<arch>)

Author:  Serge [ Sun Nov 09, 2008 8:14 am ]
Post subject:  Re: порт SQLite 1.0

Компилируй через ассемблер. В итоге объектник будет раза в три меньше.

Page 2 of 4 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/