порт SQLite 1.0

Discussing libraries simplifying applications development
  • Как мы подключали эту библиотеку к HiAsm.

    Код на Дельфи:

    Code: Select all

      {$L 'SQLiteObj\sqlite3_3_4.obj'}
      {$L 'SQLiteObj\_ll.obj'}
      {$L 'SQLiteObj\_ftoul.obj'}
      {$L 'SQLiteObj\ftol.obj'}
    
    // Stubs for external C RTL functions
    
    const MSVCRT = 'msvcrt.dll';
    
    function _malloc(size: Integer): Pointer; cdecl;
    begin
      GetMem(Result, size);
    end;
    
    function _realloc(P: Pointer; size: Integer): Pointer; cdecl;
    begin
      Result := P;
      ReallocMem(Result, size);
    end;
    
    procedure _free(P: Pointer); cdecl;
    begin
      FreeMem(P);
    end;
    
    procedure __ltolower; cdecl; asm int 3; end; // not used
    procedure __ltoupper; cdecl; asm int 3; end; // not used
    
    procedure _localtime; external MSVCRT name 'localtime';
    procedure _getenv; external MSVCRT name 'getenv';
    procedure _sprintf; external MSVCRT name 'sprintf';
    procedure _memcmp; external MSVCRT name 'memcmp';
    procedure _memcpy; external MSVCRT name 'memcpy';
    procedure _memset; external MSVCRT name 'memset';
    procedure _strlen; external MSVCRT name 'strlen';
    procedure _strcmp; external MSVCRT name 'strcmp';
    procedure _strcpy; external MSVCRT name 'strcpy';
    procedure _strncmp; external MSVCRT name 'strncmp';
    procedure _strncpy; external MSVCRT name 'strncpy';
    procedure _strcat; external MSVCRT name 'strcat';
    procedure _isspace; external MSVCRT name 'isspace';
    procedure _isalnum; external MSVCRT name 'isalnum';
    procedure _isdigit; external MSVCRT name 'isdigit';
    procedure _isxdigit; external MSVCRT name 'isxdigit';
    procedure _atol; external MSVCRT name 'atol';
    
    function _wsprintfA:integer; external 'user32.dll' name 'wsprintfA';
    procedure RtlUnwind; external 'NtDll.dll' name 'RtlUnwind';
    
    var
      __turboFloat: LongBool = False;
      __streams: Pointer = nil;
    
    Тут нет только ОС-зависимых функций, которые описаны в соответствующем файле SQLite и которые подключались из стандартного модуля API windows.
  • Библиотека, хотя и ругается на unresolved externals, все равно загружается. Написал клиента, использующего console.obj и sqlite.obj. Все работает (запросы ходят, файлы создаются), но одна проблема: нужно написать callback-функцию, в которую sqlite возвращает результаты запроса. На С я написал без проблем, а на ассемблере не могу достать параметры из стека (не нашел их там). Прототип callback-функции: int __cdecl callback(void *p, int num, char **val, char **col).
    Attachments
    client.7z (121.36 KiB)
    Downloaded 387 times
  • Главное чтобы не ругался на функции, а так это доп информация которую загрузчик неправильно обрабатывает.

    Code: Select all

    callback:
              push ebp
              mov ebp, esp
    p    equ  (ebp+8)
    num  equ (ebp+12)
    val   equ (ebp+16)
    col   equ (ebp+20)
            push ebx
            push edi
            push esi
           mov eax, [p]
           mov edx, [num]
           mov esi, [val]
           ...
    
       
    если объявлять через proc то буде проще
    
    include 'proc32.inc'
    
    proc callback cdecl, p:dword, num:dword, val:dword, col:dword
            push ebx
            push esi
            push edi
    
           mov eax, [p]
           mov ebx, [num]
  • Наконец удалось сделать отображение результатов запроса. Исходники и kex прилагаются, библиотека используется та же.
    Имхо, теперь можно говорить, что в Колибри есть СУБД :)
    Attachments
    sql.7z (2.45 KiB)
    обновленный клиент
    Downloaded 417 times
  • Ну вот теперь можно и отписаться на той страничке :)
    Ещё бы знать как ей пользоваться)
    Из хаоса в космос
  • Leency
    Пользоваться так же, как любым движком SQL - отправлять запросы, получать результаты... Почитай что-нибудь по языку SQL (про MySQL тоже можно, но есть отличия).
  • Leency, очень удобная штука)
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • что-то он у меня не запустился...:(
    *****:
    ;дух машины, мой бубен сильнее твоей тупости

    *****:
  • ДедОк
    Нужно достаточно новое ядро.
    Что-нибудь на доске отладки появляется при попытке запуска?
    Желательно также наличие папки /rd/1/sqlite (иначе базы не будут сохраняться, сейчас прога сама не умеет создавать эту папку).
  • Добавлены функции sqlite_close() - очевидного назначения, и set_path() - которая позволяет указать путь для хранения файлов sqlite (в примере стоит /hd0/1/sqlite/ - измените и перекомпилируйте, чтобы файлы сохранялись в другом месте); если функция не была вызвана, библиотека сохраняет файлы в /rd/1/ - корне рамдиска.

    Небольшой ман по сборке sqlite (написан в частности для себя, поскольку после перерыва не смог вспомнить все шаманство) и руководство программиста в архиве.
    Attachments
    sql-2.7z (119.44 KiB)
    Downloaded 438 times
  • Порт sqlite3
    На gcc.
    Работоспособность еще не проверял, просто выкладываю.

    OLD:
    Spoiler:
    Downloaded 211 times
    UPD2:
    В колибри мьютексов нету (ну реализации в ньюлиб), поэтому нужно собирать с флагом -DSQLITE_THREADSAFE=0
    UPD:
    Собираю семпл (https://zetcode.com/db/sqlitec/), было много ероров.
    Теперь их немного:
    https://wtools.io/paste-code/b3ri
    Фиксы:
    Makefile (2.64 KiB)
    Downloaded 177 times
    sqlite3.h (464.96 KiB)
    Downloaded 196 times
    NEW:
    Downloaded 188 times
    В архиве есть примерчик kos_sample, он собирается с таким ерор-логом: https://paste.in/raw/254IrO
    Их наверно нужно будет заглушить.
  • Уже вышесказано, что я пытался собрать SQLite3. НО там нужно переписывать VFS. Я попробовал sqlite2. Собралось сразу же, только потом пару функций не хватало. Я их заглушил.
    Исходники оригинала: http://web.archive.org/web/200210041239 ... source.zip
    Не компилился только файл tclsqlite.c, но он и не особо нужен.
    Пускай здесь полежит:
    https://github.com/maxcodehack/kolibrios-sqlite2
    Бинарник (клиент) для тестов: https://github.com/maxcodehack/kolibrio ... ent/sqlite
  • Who is online

    Users browsing this forum: No registered users and 7 guests