Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Feb 21, 2020 10:53 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 56 posts ]  Go to page Previous 1 2 3 4 Next
Author Message
 Post subject: Re: порт SQLite 1.0
PostPosted: Fri Oct 31, 2008 9:22 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Quote:
С путем пока не разобрался (в VC для этого, как и для параметров, нужен бубен и немного времени).

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

_________________
Ушёл к умным, знающим и культурным людям.


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Fri Oct 31, 2008 9:28 pm 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
diamond wrote:
Бубна не нужно. В SDK есть две версии программы pe2kos.exe, для создания программ, использующих путь, и не использующих.

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


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Fri Nov 07, 2008 11:30 pm 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
Особого прогресса нет, мешают странные баги.
А именно: при попытке вставить много (хотя бы 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 161 times
File comment: исходники
sqlite_kos-src.7z [249.27 KiB]
Downloaded 162 times
Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sat Nov 08, 2008 2:52 am 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
По совету 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 170 times
Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sat Nov 08, 2008 2:46 pm 
Offline

Joined: Mon May 01, 2006 10:12 pm
Posts: 349
перед началом вставок попробуй начать транзакцию, тогда sqlite должен уделать mysql ;)
статья по теме http://habrahabr.ru/blogs/webdev/42121/

_________________
Image


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sat Nov 08, 2008 3:48 pm 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
Действительно, добавление 1000 записей за одну транзакцию из SQLite под Kolibri занимает 0.2 секунды (при расположении базы как на рамдиске, там и на жестком диске). Причина - при каждом сохранении данных SQLite создает файл журнала и модифицирует основной файл базы.
Для MySQL под WinXP транзакция, наоборот, ухудшила результаты до 0.43 сек.


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sat Nov 08, 2008 4:08 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
В этом смысле MySQL странно себя ведёт, хотя я не замечал снижения скорости работы. Использование транзаций (предположительное добавление записей группой, а не по одной) в PostgreSQL увеличивает скорость "записи" в базу.

..bw


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sat Nov 08, 2008 11:00 pm 
Offline
Kernel Developer
User avatar

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

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


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Nov 09, 2008 1:03 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
А __declspec( dllexport ) не помогает ?


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Nov 09, 2008 1:08 am 
Offline

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

_________________
Image


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Nov 09, 2008 1:51 am 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
vectoroc
Можешь выложить def, который нужно написать и результат (obj-файл)?


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Nov 09, 2008 3:28 am 
Offline

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

_________________
Image


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Nov 09, 2008 3:41 am 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
Понятно...
Проблема в том, что, даже если вручную в hiew пофиксить _xports на EXPORTS, obj-файл не загружается в качестве DLL. Видимо, VC++ генерит obj-файлы несколько другого формата, чем fasm или что-то в этом роде.


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Nov 09, 2008 4:04 am 
Offline

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

_________________
Image


Top
   
 Post subject: Re: порт SQLite 1.0
PostPosted: Sun Nov 09, 2008 8:14 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Компилируй через ассемблер. В итоге объектник будет раза в три меньше.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 56 posts ]  Go to page Previous 1 2 3 4 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited