SQLite 3.53.0

9-го апреля состоялся выпуск 3.53.0 компактной кроссплатформенной встраиваемой СУБД SQLite. Код проекта написан на языке C и распространяется как общественное достояние (public domain).
Изменения:
- Исправлена ошибка WAL-reset database corruption bug. См. предыдущую новость SQLite 3.51.3 с исправлением возможного повреждения базы данных в режиме WAL.
- Добавлена библиотека форматирования результатов SQL-запросов Query Result Formatter (QRF) для обеспечения удобства чтения на экране с шрифтом фиксированной ширины.
- Добавлен метод format к интерфейсу TCL для доступа к QRF из TCL.
- QRF теперь используется в консольной утилите sqlite для форматирования результатов запросов, что улучшило их отображение.
- Новые возможности языка SQL:
- Улучшены возможности команды ALTER TABLE для обеспечения возможности добавления и удаления ограничений
NOT NULLиCHECK. - Оператор REINDEX EXPRESSIONS выполняет переиндексацию индексов выражений. Полезно для восстановления устаревших индексов выражений.
- Теперь триггеры TEMP могут изменять и/или запрашивать данные из таблиц основной схемы.
- Улучшена команда VACUUM INTO: в случае использования в качестве адреса назначения имени файла в формате URI, содержащего параметр запроса
reserve=N(гдеN— число от 0 до 255), объем резервирования для создаваемой копии базы данных устанавливается равнымN.
- Улучшены возможности команды ALTER TABLE для обеспечения возможности добавления и удаления ограничений
Добавлены новые функции SQL:
- Обновления в консольной утилите:
- Значительные улучшения команды .mode.
- Благодаря расширению QRF улучшено форматирование результатов. Например, числа теперь выравниваются вправо по умолчанию в режиме табличного вывода.
- По умолчанию QRF теперь используется при интерактивном использовании консольной утилиты для отображения результатов запросов в блоках, сформированных с помощью символов Unicode рисования блоков, что повысило читаемость. Устаревший формат вывода используется при пакетном выполнении команд для обеспечения совместимости.
- Одиночные (не заключенные в кавычки) точки с запятой в конце команд с точкой игнорируются без предупреждения. Это возможная несовместимость!
- Исправлены команды
.testcaseи.check. Теперь они действительно работают и используются в скриптах, входящих в стандартный набор тестов SQLite, входящих в исходные коды. - Аргументы командной строки, которые соответствуют шаблонам
*.sqlили*.txtи представляют собой имена непустых файлов, считываются и интерпретируются как скрипты, содержащие SQL-операторы и/или [команды с точкой]((https://sqlite.org/cli.html#dotcmd). - Теперь в качестве аргумента команды
.timerможно указатьonceдля срабатывания таймера только при выполнении следующего SQL-запроса. - Новый параметр
--timeout Sкоманды.progressприводит к прерыванию выполнения SQL-запросов по истеченииSсекунд. - Команда
.indexesизменена так, что аргументPATTERNтеперь сопоставляется с именем индекса, а не с именем индексируемой таблицы (благодаря чему аргументPATTERNстал действительно полезным). Кроме того, в команду.indexesбыло добавлено несколько новых опций.
Улучшения в C API:
- Улучшения планировщика запросов:
- Для
EXCEPT,INTERSECTиUNIONвсегда используется алгоритм сортировки и слияния, так как он почти всегда работает быстрее, чем использование хеш-таблиц. - Улучшения в механизме выбора порядка
joinпри выполнении больших многосторонних соединений в звездообразной схеме. - Усовершенствована оптимизация преобразования
EXISTSвJOINтак, чтобы вставляемые условияJOINне обязательно находились во внутренних циклах, при условии, что все зависимости для циклов преобразованияEXISTSвJOINнаходятся во внешних циклах. - Усовершенствована оптимизация
omit-noop-joinтак, что она может опускать цепочку соединений, не влияющих на результат. - Оптимизация запросов, использующих
GROUP BY e1 ORDER BY e2, гдеe1иe2идентичны, за исключением порядка сортировкиASC/DESC, с помощью одного индекса. - Оптимизация оператора
DISTINCTв виртуальных таблицах в тех случаях, когда набор результатов запроса не полностью соответствует условиюORDER BY.
- Для
В расширение сеанса добавлены новые интерфейсы, позволяющие приложению добавлять изменения по одному в объект
sqlite3_changegroup:- Улучшения в преобразовании чисел с плавающей запятой ↔ текст.
- Код полностью переписан для улучшения производительности.
- Теперь по умолчанию округление производится до 17 значащих цифр вместо 15, как это было во всех предыдущих версиях. При необходимости это значение можно изменить с помощью функции sqlite3_db_config с опцией SQLITE_DBCONFIG_FP_DIGITS (см. там пункт
6gвыше).
- Добавлена возможность самовосстановления индекса для решения проблемы устаревших индексов выражений.
- В консольную утилиту sqlite3_rsync добавлена опция
-p|--port. - Прекращена поддержка Windows RT.
- JavaScript/WASM
- Добавлена VFS
opfs-wl, функционально идентичнаяopfs, но использующая для блокировок Web Locks, что позволяет обеспечить более справедливое распределение блокировок, чем в протоколеopfs.opfs-wlтребует наличия функцииAtomics.waitAsync(), поэтому для его работы требуются более новые версии браузеров, чем дляopfs.
- Добавлена VFS
>>> Подробности на sqlite.org
