Амальгамированный SQLite
1. Обзор
Более 100 отдельных исходных файлов объединены в один большой файл C-кода, названный "sqlite3.c" и называемый "амальгамированным" файлом. Амальгамированный файл содержит всё необходимое для встраивания SQLite в приложение.
Объединение всего кода SQLite в один большой файл упрощает его развертывание — нужно отслеживать только один файл. Кроме того, поскольку весь код находится в одном едином трансляционном блоке, компиляторы могут лучше оптимизировать межпроцедурные вызовы и встраивание, что приводит к исполняемому коду, работающему на 5-10% быстрее.
2. Амальгамированный файл SQLite
Библиотека SQLite состоит из 111 файлов C-кода (на момент версии 3.37.0 - 2021-11-27) в ядре и 22 дополнительных файлов, реализующих некоторые часто используемые расширения. Из 133 основных исходных файлов около 75% составляют файлы C-кода и около 25% — заголовочные файлы C. Большинство из них являются файлами "исходного кода" в том смысле, что они хранятся в системе контроля версий SQLite и редактируются вручную в обычном текстовом редакторе. Но некоторые файлы C-кода генерируются с помощью скриптов или вспомогательных программ. Например, файл parse.y содержит LALR(1) грамматику языка SQL, которая компилируется генератором парсеров Lemon для создания парсера, содержащегося в файле "parse.c", а также идентификаторов токенов в файле "parse.h".
Makefile для SQLite имеет цель "sqlite3.c" для построения амальгамированного файла, содержащего весь C-код для ядра библиотеки SQLite и расширений FTS3, FTS5, RTREE, DBSTAT, JSON1, RBU и SESSION. Этот файл содержит около 238 тыс. строк кода (или 145 тыс. строк, если исключить пустые строки и комментарии) и имеет размер более 8,4 мегабайт (на момент 2021-12-29).
Хотя различные расширения включены в амальгамированный файл "sqlite3.c", они отключены с помощью инструкций #ifdef. Включите расширения с помощью параметров времени компиляции, например:
- -DSQLITE_ENABLE_FTS3
- -DSQLITE_ENABLE_FTS5
- -DSQLITE_ENABLE_RTREE
- -DSQLITE_ENABLE_DBSTAT_VTAB
- -DSQLITE_ENABLE_RBU
- -DSQLITE_ENABLE_SESSION
Амальгамированный файл содержит всё необходимое для интеграции SQLite в более крупный проект. Просто скопируйте амальгамированный файл в свой каталог исходных файлов и скомпилируйте его вместе с другими файлами C-кода вашего проекта. (Более подробное обсуждение процесса компиляции доступно по ссылке.) Вы также можете использовать заголовочный файл "sqlite3.h", определяющий API программирования для SQLite. Заголовочный файл sqlite3.h доступен отдельно. Файл sqlite3.h также содержится в амальгамированном файле в первых нескольких тысячах строк. Поэтому, если у вас есть копия sqlite3.c, но вы не можете найти sqlite3.h, вы всегда можете сгенерировать sqlite3.h, скопировав и вставив его из амальгамированного файла.
Помимо того, что амальгамированный файл упрощает включение SQLite в другие проекты, он также ускоряет его работу. Многие компиляторы могут выполнять дополнительные оптимизации кода, когда он содержится в едином трансляционном блоке, как в амальгамированном файле. Мы замерили улучшения производительности на 5-10% при использовании амальгамированного файла для компиляции SQLite вместо отдельных исходных файлов. Недостатком является то, что дополнительные оптимизации часто принимают форму встраивания функций, что увеличивает размер результирующего двоичного изображения.
3. Разделенный амальгамированный файл
Иногда разработчики сталкиваются с проблемами отладки амальгамированного файла исходного кода размером в четверть миллиона строк, поскольку некоторые отладчики могут обрабатывать только номера строк исходного кода меньше 32 768. Исходный код амальгамированного файла работает нормально. Просто в отладчике нельзя выполнять пошаговое выполнение кода.
Чтобы обойти это ограничение, амальгамированный файл также доступен в разделенном виде, состоящем из файлов "sqlite3-1.c", "sqlite3-2.c" и т. д., где каждый файл содержит менее 32 768 строк, а объединение этих файлов содержит весь код полного амальгамированного файла. Кроме того, есть отдельный исходный файл под названием "sqlite3-all.c", который в основном содержит код такого вида:
#include "sqlite3-1.c" #include "sqlite3-2.c" #include "sqlite3-3.c" #include "sqlite3-4.c" #include "sqlite3-5.c" #include "sqlite3-6.c" #include "sqlite3-7.c"
Приложения, использующие разделенный амальгамированный файл, просто компилируются с "sqlite3-all.c" вместо "sqlite3.c". Эти два файла работают совершенно одинаково. Но с "sqlite3-all.c" ни один исходный файл не содержит более 32 767 строк кода, что делает его удобнее использовать в некоторых отладчиках. Недостатком разделенного амальгамированного файла является то, что он состоит из 6 файлов C-исходного кода вместо одного.
4. Загрузка предварительно скомпилированных копий амальгамированного файла
Амальгамированный файл и заголовочный файл sqlite3.h доступны на странице загрузки в файле под названием sqlite-amalgamation-X.zip, где X заменяется соответствующим номером версии.
5. Сборка амальгамированного файла из исходного кода
Для сборки амальгамированного файла (полного или разделенного) сначала скачайте исходный код с одного из трёх серверов. Затем в системе, подобной Unix, выполните:
./configure && make sqlite3.c
Для сборки на Windows с помощью Microsoft Visual C++, выполните эту команду:
nmake /f makefile.msc sqlite3.c
В обоих случаях разделенный амальгамированный файл можно получить, заменив "sqlite3.c" на "sqlite3-all.c" в качестве цели Makefile.
5.1. Зависимости
Процесс сборки широко использует скриптовый язык Tcl. Для работы целей make, указанных выше, вам потребуется копия установленного TCL.
Пошаговые инструкции по сборке SQLite из исходного кода, включая инструкции по установке TCL, приведены в дереве исходного кода в следующих документах:
- https://sqlite.org/src/doc/trunk/doc/compile-for-unix.md
- https://sqlite.org/src/doc/trunk/doc/compile-for-windows.md
В ссылках выше вы можете заменить компонент пути "trunk" другой меткой или датой, чтобы найти более старые версии документа. Например, чтобы найти документ compile-for-unix.md, который был актуален для версии SQLite 3.47.0, используйте URL-адрес "https://sqlite.org/src/doc/version-3.47.0/doc/compile-for-unix.md". Или чтобы получить версию compile-for-windows.md, которая была актуальной 2024-10-18, используйте такой URL-адрес: "https://sqlite.org/src/doc/20241018/doc/compile-for-windows.md".
5.2. См. также
Дополнительные заметки по компиляции SQLite можно найти на странице Как скомпилировать SQLite.
Эта страница была последним обновлена 2024-10-17 17:10:10 UTC
SQLite is in the Public Domain.
https://sqlite.org/amalgamation.html