SQLite 3.53.0

500px.jpg

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.
  • Добавлены новые функции 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.

>>> Подробности на sqlite.org

©  Linux.org.ru