Spec-Zone.ru › SQLite

Амальгамация SQLite

1. Краткое описание

Более 100 отдельных исходных файлов объединяются в один большой файл с кодом на C под названием "sqlite3.c", который называют «амальгамацией». Амальгамация содержит всё необходимое приложению для встраивания SQLite.

Объединение всего кода 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 содержит грамматику языка SQL LALR(1), которая компилируется с помощью генератора синтаксических анализаторов Lemon и создаёт анализатор в файле "parse.c", а идентификаторы токенов — в файле "parse.h".

В make-файлах 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.c, но вы не можете найти 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 заменяется соответствующим номером версии.

На странице загрузки также обычно размещён архив tarball с именем "sqlite-autoconf-X.tar.gz", содержащий исходные файлы амальгамации, а также скрипт ./configure и Makefile, необходимые для сборки библиотеки SQLite и интерфейса командной строки.

5. Сборка амальгамации из канонического исходного кода

Чтобы создать амальгамацию (полную или разделённую), сначала получите канонический исходный код с одного из трёх серверов. Затем в Unix-подобных системах выполните:

./configure && make sqlite3.c

Для сборки в Windows с помощью Microsoft Visual C++ выполните эту команду:

nmake /f makefile.msc sqlite3.c

В обоих случаях разделённую амальгамацию можно получить, указав "sqlite3-all.c" вместо "sqlite3.c" в качестве цели make.

5.1. Зависимости

В процессе сборки широко используется скриптовый язык Tcl. Чтобы приведённые выше цели make работали, необходимо установить TCL. Установить 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.

Последнее обновление этой страницы: 2025-04-16 13:13:29Z

SQLite is in the Public Domain.
https://sqlite.org/amalgamation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API