Добавить в корзинуПозвонить
Найти в Дзене
Chris Roylance

Состоялся выпуск SQLite 3.51.2

Очередной выпуск SQLite 3.51.2 состоялся 09.01.2026 и привнес следующие изменения: 2. Добавлены две новые функции для работы с JSON, jsonb_each() и jsonb_tree(), работают так же, как и существующие функции json_each() и json_tree(), за исключением того, что они возвращают JSONB для столбца "value", когда "type" равен 'array' или 'object'. 3. Расширения для работы с массивами и процентилями теперь встроены в объединенную библиотеку, хотя по умолчанию они отключены и должны быть активированы во время компиляции с помощью параметров -DSQLITE_ENABLE_CARRAY и/или -DSQLITE_ENABLE_PERCENTILE соответственно. 4. Улучшения интерфейса TCL: 5. Улучшения CLI: 6. Улучшения производительности: 7. Добавьте команду PRAGMA wal_checkpoint=NOOP; и аргумент SQLITE_CHECKPOINT_NOOP для функции sqlite3_wal_checkpoint_v2(). 8. Добавьте API sqlite3_set_errmsg() для использования расширениями. 9. Добавлен API sqlite3_db_status64(), который работает аналогично существующему API sqlite3_db_status(), за исключение
Оглавление

Очередной выпуск SQLite 3.51.2 состоялся 09.01.2026 и привнес следующие изменения:

  1. Добавлены новые макросы в sqlite3.h
  • SQLITE_SCM_BRANCH - название ветки, из которой взят исходный код.
  • SQLITE_SCM_TAGS - список тегов, разделенных пробелами, для записи исходного кода.
  • SQLITE_SCM_DATETIME - дата и время записи исходного кода в формате ISO-8601.

2. Добавлены две новые функции для работы с JSON, jsonb_each() и jsonb_tree(), работают так же, как и существующие функции json_each() и json_tree(), за исключением того, что они возвращают JSONB для столбца "value", когда "type" равен 'array' или 'object'.

3. Расширения для работы с массивами и процентилями теперь встроены в объединенную библиотеку, хотя по умолчанию они отключены и должны быть активированы во время компиляции с помощью параметров -DSQLITE_ENABLE_CARRAY и/или -DSQLITE_ENABLE_PERCENTILE соответственно.

4. Улучшения интерфейса TCL:

  • Добавлен флаг -asdict к команде eval, чтобы она устанавливала данные строки в виде словаря, а не массива.
  • Пользовательские функции теперь могут возвращать значение SQL NULL.

5. Улучшения CLI:

  • Повышена точность команды ".timer" до микросекунд.
  • Улучшены режимы форматирования "box" и "column" для работы с символами двойной ширины.
  • Команда ".imposter" предоставляет таблицы-имитаторы только для чтения, которые работают с VACUUM и не требуют параметра --unsafe-testing.
  • Добавлен параметр --ifexists к параметрам командной строки CLI и к команде .open.
  • Ограничена ширина столбцов, устанавливаемая командой ".width", до 30 000 или меньше, поскольку нет веских причин использовать более широкие столбцы, но поддержка более широких столбцов предоставляет возможности для злоумышленников.

6. Улучшения производительности:

  • Использование меньшего количества циклов ЦП для подтверждения транзакции чтения.
  • Раннее обнаружение соединений, не возвращающих строки из-за отсутствия строк в одной или нескольких таблицах.
  • Избегание вычисления скалярных подзапросов, если результат подзапроса не изменяет результат общего выражения.
  • Более быстрые запросы с использованием оконной функции при использовании "BETWEEN :x FOLLOWING AND :y FOLLOWING" с большим значением :y.

7. Добавьте команду PRAGMA wal_checkpoint=NOOP; и аргумент SQLITE_CHECKPOINT_NOOP для функции sqlite3_wal_checkpoint_v2().

8. Добавьте API sqlite3_set_errmsg() для использования расширениями.

9. Добавлен API sqlite3_db_status64(), который работает аналогично существующему API sqlite3_db_status(), за исключением того, что он возвращает 64-битные результаты.

10. Добавьте параметр SQLITE_DBSTATUS_TEMPBUF_SPILL к интерфейсам sqlite3_db_status() и sqlite3_db_status64().

11. В расширение сессии добавьте интерфейс sqlite3changeset_apply_v3().

12. Для встроенных функций SQL printf() и format() опускайте начальный символ '-' из отрицательных чисел с плавающей запятой, если флаг '+' опущен, а флаг '#' присутствует и все отображаемые цифры равны '0'. Используйте '%#f' или аналогичный код, чтобы избежать вывода типа '-0.00' и вместо этого отображать только '0.00'.

13. Улучшены сообщения об ошибках, генерируемые FTS5.

14. Применить строгий тип STRICT к вычисляемым столбцам.

15. Улучшена поддержка VxWorks.

16. JavaScript/WASM теперь поддерживает 64-битную архитектуру. Канонические сборки по-прежнему 32-битные, но создание собственной 64-битной сборки теперь так же просто, как запуск команды "make".

17. Улучшена устойчивость к повреждению базы данных, вызванному нарушением блокировок Posix с помощью функции close().

Исправления с версии 3.51.1

1. Исправлены некорректные результаты вложенных запросов EXISTS, вызванные оптимизацией в пункте 6b в версии 3.51.0.

2. Исправлена ​​скрытая ошибка в виртуальной таблице fts5vocab, выявленная новыми оптимизациями в версии 3.51.0.

Изменения в этом конкретном патче, версия 3.51.2

1. Исправлена ​​неясная взаимоблокировка в новой логике обнаружения сломанных POSIX-блокировок в пункте 17 выше.

2. Исправлены многочисленные проблемы в оптимизации EXISTS-to-JOIN, добавленной в рамках оптимизации пункта 6b выше.

3. Другие незначительные исправления ошибок.

4. SQLITE_SOURCE_ID: 2026-01-09 17:27:48 b270f8339eb13b504d0b2ba154ebca966b7dde08e40c3ed7d559749818cb2075

5. Контрольная сумма SHA3-256 для sqlite3.c: 733b3fcc6cccb1e334424b9b91a9d68b618385b76ebfcbb106690bd3a9e61367