SQLite 3.35

SQLite — компактная встраиваемая СУБД. Исходный код библиотеки передан в общественное достояние.

Слово «встраиваемый» (embedded) означает, что SQLite не использует парадигму клиент-сервер, то есть движок SQLite не является отдельно работающим процессом, с которым взаимодействует программа, а представляет собой библиотеку, с которой программа компонуется, и движок становится составной частью программы. Таким образом, в качестве протокола обмена используются вызовы функций (API) библиотеки SQLite.

Такой подход уменьшает накладные расходы, время отклика и упрощает программу. SQLite хранит всю базу данных (включая определения, таблицы, индексы и данные) в единственном стандартном файле на том компьютере, на котором исполняется программа. Простота реализации достигается за счёт того, что перед началом исполнения транзакции записи весь файл, хранящий базу данных, блокируется; ACID-функции достигаются в том числе за счёт создания файла журнала. 

Финансовую поддержку разработчиков SQLite осуществляет специально созданный консорциум, в который входят такие компании, как Adobe, Oracle, Mozilla, Bentley и Bloomberg. 

Изменения в новой версии СУБД:

  • Добавлены встроенные математические функции (log2(), cos(), tg(), exp(), ln(), pow() и т.п.), которые можно использовать в SQL. Для включения встроенных функций требуется сборка с опцией "-DSQLITE_ENABLE_MATH_FUNCTIONS".
  • Реализована поддержка выражения "ALTER TABLE DROP COLUMN" для удаления столбцов из таблицы и очистки ранее хранившихся в данном столбце данных.
  • Расширена реализация операции UPSERT (добавить-или-модифицировать), позволяющей через выражения вида "INSERT ... ON CONFLICT DO NOTHING/UPDATE" игнорировать ошибку или выполнить обновление вместо вставки в случае невозможности добавления данных через "INSERT" (например, если запись уже существует, вместо INSERT можно выполнить UPDATE). В новой версии разрешено указание нескольких блоков "ON CONFLICT", которые будут обработаны в порядке следования. В последнем блоке "ON CONFLICT" разрешено не указывать параметр определения конфликта для использования "DO UPDATE".
  • В операциях DELETE, INSERT и UPDATE реализована поддержка выражения RETURNING, при помощи которого можно вывести содержимое удалённой, вставленной или изменённой записи. Например, выражение "insert into ... returning id" вернёт идентификатор добавленной строки, а "update ... set price = price * 1.10 returning price" вернёт изменённое значение price.
  • Для обобщённых табличных выражений (Common Table Expression, CTE), позволяющих использовать временные именованные результирующие наборы, задаваемые при помощи оператора WITH, разрешён выбор режимов "MATERIALIZED" и "NOT MATERIALIZED". "MATERIALIZED" подразумевает кэширование заданного в представлении запроса в отдельной физической таблице с последующей выборкой данных из этой таблицы, а при "NOT MATERIALIZED" при каждом обращении к представлению будут осуществляться повторные запросы. Изначально в SQLite по умолчанию использовался режим "NOT MATERIALIZED", но теперь для CTE, используемых более одного раза, изменён на "MATERIALIZED".
  • Сокращено потребление памяти при выполнении операции VACUUM для БД, включающих очень большие значения с типами TEXT или BLOB.
  • Проведена работа по увеличению производительности оптимизатора и планировщика запросов:
    • Добавлены оптимизации при использовании функций min и max с выражением "IN".
    • Ускорено выполнение оператора EXISTS.
    • Реализовано развёртывание подзапросов из выражений UNION ALL, используемых в составе JOIN.
    • Задействован индекс для выражений IS NOT NULL.
    • Обеспечено преобразование "x IS NULL" и "x IS NOT NULL" в FALSE или TRUE для столбцов, имеющих признак "NOT NULL".
    • Пропущена проверка внешних ключей в UPDATE, если операция не меняет столбцов, связанных с внешним ключом.
    • Разрешено перемещение частей блока WHERE в подзапросы, содержащие оконные функции, если эти части ограничены работой с константами и копиями выражений из блоков "PARTITION BY", используемых в оконных функциях.
  • Изменения в интерфейсе командной строки:
    • Добавлена команда ".filectrl data_version".
    • В командах ".once" и ".output" добавлена поддержка передачи вывода в обработчик, вызываемый с использованием неименованных каналов ("|").
    • В команду ".stats" добавлены аргументы "stmt" и "vmstep" для вывода статистики по выражениям и счётчиков виртуальной машины.

Код SQLite распространяется как общественное достояние (public domain).