Page 2 of 4

Re: порт SQLite 1.0

Posted: Fri Oct 31, 2008 9:22 pm
by diamond
С путем пока не разобрался (в VC для этого, как и для параметров, нужен бубен и немного времени).
Бубна не нужно. В SDK есть две версии программы pe2kos.exe, для создания программ, использующих путь, и не использующих. Просто окончательное преобразование делай первой из них, а сам путь можно получить кодом

Code: Select all

const char* path = *(const char**)0x20;

Re: порт SQLite 1.0

Posted: Fri Oct 31, 2008 9:28 pm
by barsuk
diamond wrote:Бубна не нужно. В SDK есть две версии программы pe2kos.exe, для создания программ, использующих путь, и не использующих.
Спасибо, а я не знал - думал, что самому придется писать :)

Re: порт SQLite 1.0

Posted: Fri Nov 07, 2008 11:30 pm
by barsuk
Особого прогресса нет, мешают странные баги.
А именно: при попытке вставить много (хотя бы 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++ не умеет не добавлять подчеркивания).

Re: порт SQLite 1.0

Posted: Sat Nov 08, 2008 2:52 am
by barsuk
По совету diamond'a увеличил стек с 4К до 64К - все работает! :)

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

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

Re: порт SQLite 1.0

Posted: Sat Nov 08, 2008 2:46 pm
by vectoroc
перед началом вставок попробуй начать транзакцию, тогда sqlite должен уделать mysql ;)
статья по теме http://habrahabr.ru/blogs/webdev/42121/

Re: порт SQLite 1.0

Posted: Sat Nov 08, 2008 3:48 pm
by barsuk
Действительно, добавление 1000 записей за одну транзакцию из SQLite под Kolibri занимает 0.2 секунды (при расположении базы как на рамдиске, там и на жестком диске). Причина - при каждом сохранении данных SQLite создает файл журнала и модифицирует основной файл базы.
Для MySQL под WinXP транзакция, наоборот, ухудшила результаты до 0.43 сек.

Re: порт SQLite 1.0

Posted: Sat Nov 08, 2008 4:08 pm
by bw
В этом смысле MySQL странно себя ведёт, хотя я не замечал снижения скорости работы. Использование транзаций (предположительное добавление записей группой, а не по одной) в PostgreSQL увеличивает скорость "записи" в базу.

..bw

Re: порт SQLite 1.0

Posted: Sat Nov 08, 2008 11:00 pm
by diamond
barsuk wrote:Еще никак не удается сделать в VC++ obj-файл, который загружался бы как DLL Kolibri. Чтобы сделать метку EXPORTS использую такой прием: объявляю константу XPORTS, которая экспортируется как _XPORTS и заменяю в hiew на EXPORTS (VC++ не умеет не добавлять подчеркивания).
Это уже вопрос к нашим ЯВУшникам...

Re: порт SQLite 1.0

Posted: Sun Nov 09, 2008 1:03 am
by Serge
А __declspec( dllexport ) не помогает ?

Re: порт SQLite 1.0

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

Re: порт SQLite 1.0

Posted: Sun Nov 09, 2008 1:51 am
by barsuk
vectoroc
Можешь выложить def, который нужно написать и результат (obj-файл)?

Re: порт SQLite 1.0

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

Re: порт SQLite 1.0

Posted: Sun Nov 09, 2008 3:41 am
by barsuk
Понятно...
Проблема в том, что, даже если вручную в hiew пофиксить _xports на EXPORTS, obj-файл не загружается в качестве DLL. Видимо, VC++ генерит obj-файлы несколько другого формата, чем fasm или что-то в этом роде.

Re: порт SQLite 1.0

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

Re: порт SQLite 1.0

Posted: Sun Nov 09, 2008 8:14 am
by Serge
Компилируй через ассемблер. В итоге объектник будет раза в три меньше.