Опубликован релиз SQLite 3.46, легковесной СУБД, оформленной в виде подключаемой библиотеки. Код SQLite распространяется как общественное достояние (public domain), т.е. может использоваться без ограничений и безвозмездно в любых целях. Финансовую поддержку разработчиков SQLite осуществляет специально созданный консорциум.
Основные изменения:
- Предоставлена возможность использования в числах разделителя “_” для более наглядного представления числовых литералов (например, 1_234_567).
- Добавлена SQL-функция json_pretty() для генерации более читаемого вывода в формате JSON, отформатированного c использованием выделения блоков отступами.
- Расширены возможности операции “PRAGMA optimize“, выполняющей оптимизацию БД и всех схем данных для достижения наилучшей производительности запросов. Реализован автоматически применяемый лимит на длительность анализа БД, исключающий слишком большое время обработки больших БД. Добавлена новая битовая маска “PRAGMA optimize(0x10000)” для отдельной проверки обновлений во всех таблицах.
Обеспечен автоматический повторный анализ таблиц, в которых отсутствуют записи sqlite_stat1. - В SQL-функцию strftime() добавлена поддержка подстановок %G, %g, %U и %V.
- В SQL-функции для работы с датами и временем добавлены новые модификаторы ceiling и floor для управления обработкой неоднозначных дат, возникающих при операциях сдвига дат на определённое число месяцев или лет. Обеспечено игнорирование модификаторов utc и localtime, если SQLite имеет сведения о том, что время уже в представлении UTC или localtime.
- Внесены оптимизации в планировщик запросов. Для выражений INSERT, содержащих тысячи значений в секции VALUES, по умолчанию включена оптимизация “VALUES-as-coroutine”, позволяющая примерно в два раза ускорить разбор подобных выражений и в два раза сократить потребление памяти. Для запросов вида “SELECT count(DISTINCT col) FROM …” разрешено применение индексов, даже если размер записей в индексе не меньше, чем записей в таблице. Улучшена логика определения ситуаций, при которых в аргументах SQL-функций указываются константы. Обеспечено применение оптимизации push-down для выражений WHERE, содержащих несвязанные подзапросы.
- Изменена логика обработки переполнения стека – при обнаружении нехватки памяти для стека парсер теперь пытается выделить дополнительную память из кучи, вместо вывода ошибки “parser stack overflow”.
- В JSON разрешено указание управляющих символов в строковых литералах JSON5. Изменена логика работы операторов “->” и “->>”, когда в правой части строковый операнд содержит только цифры (по аналогии с PostgreSQL такие операнды теперь обрабатываются как строка).
- В значении DEFAULT в столбцах таблиц разрешено указание больших шестнадцатеричных литералов.
Release.
Ссылка here.