Page 1 of 4

порт SQLite 1.0

Posted: Sun Oct 26, 2008 7:44 pm
by barsuk
Не очень успешная пока что попытка портировать SQLite 1.0.
SQLite выбрана потому, что основная часть зависимых от платформы/ОС функций там вынесена в отдельный модуль, кроме того, используется мало функций стандартной библиотеки языка C.
Текущая версия работает как "калькулятор": оператор SELECT + выражение (например, select max(1+3,5/7.5))
Есть работа с целыми, вещественными числами и строками;
Работают функции:
min, max, length, abs, substr, random, last_insert_rowid, like, nullif.

Не работает (падает) создание таблиц (остальные функции работы с таблицами
по этой причине проверить не удалось).

Однако работают begin transaction, commit, rollback :)

Внимание - прога создает мусорные файлы (временные файлы БД и логи) на рамдиске.

Re: порт SQLite 1.0

Posted: Tue Oct 28, 2008 11:24 pm
by ДедОк
barsuk
Делаешь великое дело... это очередной краеугольный камень в постройке системы...:) буду тестировать, и посажу свой проект на SQL... ;)

Re: порт SQLite 1.0

Posted: Tue Oct 28, 2008 11:37 pm
by barsuk
Спасибо :)
Надеюсь, скоро будет что тестировать - пока глюк с созданием таблиц не ловится...

Re: порт SQLite 1.0

Posted: Wed Oct 29, 2008 1:04 am
by diamond
Компилятор Visual C++? Попробуй добавить ему опцию командной строки /Gs0x100000 (при компиляции через build.bat эту опцию нужно добавить в параметр CPP_PROJ из hello.mak).

Re: порт SQLite 1.0

Posted: Wed Oct 29, 2008 1:15 am
by barsuk
diamond, огромное спасибо! Я сам не скоро догадался бы до этого. :) Теперь create table не падает (хотя я не могу понять, как это могло быть связано с опцией /Gs).

Re: порт SQLite 1.0

Posted: Wed Oct 29, 2008 10:02 am
by Gluk
а "мусорные" файлы можно ли в папку вроде "/sqllite" кидать?

Re: порт SQLite 1.0

Posted: Wed Oct 29, 2008 12:52 pm
by diamond
barsuk wrote:(хотя я не могу понять, как это могло быть связано с опцией /Gs)
Если вкратце - управление стеком в Windows и Kolibri различается: в Kolibri стек представляет собой обычную область памяти, а в Windows иногда нужны дополнительные махинации. VC, будучи компилятором под Windows, вставляет дополнительный код в функции с размером локальных переменных больше страницы (0x1000 байт = 4К) - вызовы специальной библиотечной функции _chkstk, которая в kos_func.c почему-то реализована как пустая, но должна выделять соответствующее пространство в стеке, уменьшая esp. Соответственно после вызова этой функции стек летит со всеми вытекающими последствиями. Ясно, что очень немногие функции нуждаются в более 4К локальных переменных, но одна такая здесь есть, и она вызывается при create table.
Ключ /Gs изменяет предел с 0x1000 байт на заведомо большое значение, подавляя вставку вызовов _chkstk.

Re: порт SQLite 1.0

Posted: Wed Oct 29, 2008 7:48 pm
by bw
Интересно как.
В FP RTL есть подобная функция, но я не понял её смысла, пошел проверять правильно ли я её реализовал. Проблем пока не было.
Спасибо за информацию.

..bw

Re: порт SQLite 1.0

Posted: Thu Oct 30, 2008 12:25 am
by barsuk
Gluk wrote:а "мусорные" файлы можно ли в папку вроде "/sqllite" кидать?
Принято. Хотя новая версия умеет удалять ненужные файлы, все файлы, которые создает программа, теперь находятся в папке sqlite на рамдиске. Если папки нет, ее нужно создать.

Эта версия уже умеет создавать таблицы (например: create table table_name (id integer, value text)). Можно удалять таблицы и вставлять и извлекать значения. К сожалению, еще полно багов:
1) добавление нового ряда замещает предыдущий,
2) но если есть первичный ключ, можно добавить только 1 ряд,
3) иногда ранее созданные таблицы куда-то исчезают,
4) иногда сбивается парсер выражений и начинает выдавать syntax error на все подряд.
Эти баги известны, я их исправляю. Найдете еще - пишите :)

Re: порт SQLite 1.0

Posted: Thu Oct 30, 2008 12:58 pm
by Gluk
а эти файлы много места занимают? а то рамдиск во многих дистрибутивах забит полностью де-факто..//у меня пока нет возможности самому посмотреть

Re: порт SQLite 1.0

Posted: Thu Oct 30, 2008 1:01 pm
by Gluk
да и не только мусор, сама база данных ведь может быть довольно большой..

Re: порт SQLite 1.0

Posted: Thu Oct 30, 2008 5:20 pm
by DmitrySokolowsky
ну так можно всё это размещать на разделе FAT винта...

Re: порт SQLite 1.0

Posted: Fri Oct 31, 2008 1:02 pm
by Gluk
как я понял, в этом порте - нельзя.. хотябы уж диск задавать бы, а не полный путь.. // думаю, это выходит за пределы портирования программы // или хотябы путь "/sqlite"относительно исполнимого файла программы..

Re: порт SQLite 1.0

Posted: Fri Oct 31, 2008 6:50 pm
by barsuk
Gluk wrote:путь "/sqlite"относительно исполнимого файла программы
Хорошая мысль. Сделаю так. В будущем, разумеется, место размещения файлов БД будет настраиваться.

Re: порт SQLite 1.0

Posted: Fri Oct 31, 2008 9:05 pm
by barsuk
Найденные баги, по-видимому, исправлены. В архиве кроме самой проги еще файл test - это файл БД, который нужно поместить на рамдиск в папку sqlite, после чего можно будет юзать пример таблицы (называется user2).
С путем пока не разобрался (в VC для этого, как и для параметров, нужен бубен и немного времени).