Выпуск СУБД SQLite 3.45

Опубликован релиз SQLite 3.45, легковесной СУБД, оформленной в виде подключаемой библиотеки. Код SQLite распространяется как общественное достояние (public domain), т.е. может использоваться без ограничений и безвозмездно в любых целях. Финансовую поддержку разработчиков SQLite осуществляет специально созданный консорциум, в который входят такие компании, как Bentley, Bloomberg, Expensify и Navigation Data Standard.

Основные изменения:

  • Все SQL-функции для работы с форматом JSON переписаны и переведены на новый внутренний формат дерева разбора JSONB, который сериализируется и может храниться в БД для исключения повторного разбора при использовании значений JSON. Новые версии функций, формирующих JSON, теперь генерируют бинарный формат JSONB вместо текстового. В функцию json_valid() добавлен необязательный второй аргумент, через который можно задать битовую маску, определяющую признаки корректного JSON (например, при указании 0x04 корректным будет признан блоб JSONB, при указании 0x01 текстовый JSON в формате RFC-8259, а при указании 0x05 оба варианта).
  • В виртуальную таблицу FTS5, применяемую для полнотекстового поиска, добавлена опция tokendata, позволяющая использовать собственные токенизаторы.
  • По умолчанию включена оптимизация SQLITE_DIRECT_OVERFLOW_READ, при которой overflow-страницы, размер которых больше стандартного размера страницы b-tree, читаются из файла напрямую, минуя кэш. Для отключения при сборке можно использовать опцию «-DSQLITE_DIRECT_OVERFLOW_READ=0».
  • В планировщике запросов повышена эффективность оптимизации транзитивных ограничений (transitive constraint) и улучшено игнорирование индексов, которые признаны низкокачественными при выполнении операции ANALYZE.
  • В интерфейсе командной строки улучшено отображение содержимого в кодировке UTF-8 на платформе Windows. Обеспечено автоматическое определение использования CLI-интерфейса при воспроизведении скриптов «.dump» и внесение соответствующих изменений в настройки, такие как «.dbconfig defensive off» и «.dbconfig dqs_dll on».
  • В определяемые на стороне приложения SQL-функции добавлено свойство SQLITE_RESULT_SUBTYPE, которое разрешает вызывать из функции sqlite3_result_subtype() для инспектирования подтипов аргументов.

Дополнительно можно отметить развитие в экспериментальных сборках SQLite нового режима ведения журнала транзакций — WAL2 («PRAGMA journal_mode = wal2»), при котором используется два wal-файла ( «database-wal» и «database-wal2») вместо одного. При записи данных в БД, выполняется добавление новых данных в первый wal-файл. Если первый wal-файл достигнет достаточно большого размера, осуществляется переключение на запись во второй файл. После переключение на второй wal-файл, первый становится доступен для фиксации изменений (checkpoint) и перезаписи. Соответственно, когда второй wal-файл достигает большого размера, осуществляется переключение на первый и т.п., что решает проблему с неконтролируемым разрастанием wal-файла в ситуациях, когда долго не фиксируется транзакция или выполняются длительные процессы чтения.

Источник: http://www.opennet.ru/opennews/art.shtml?num=60460