Выпуск СУБД SQLite 3.35
18 марта 2021 года
Опубликован релиз SQLite 3.35, легковесной СУБД, оформленной в виде подключаемой библиотеки. Код SQLite распространяется как общественное достояние (public domain), т.е. может использоваться без ограничений и безвозмездно в любых целях. Финансовую поддержку разработчиков SQLite осуществляет специально созданный консорциум, в который входят такие компании, как Adobe, Oracle, Mozilla, Bentley и Bloomberg.
- Добавлены встроенные математические функции (log2(), cos(), tg(), exp(), ln(), pow() и т.п.), которые можно использовать в SQL. Для включения встроенных функций требуется сборка с опцией "-DSQLITE_ENABLE_MATH_FUNCTIONS".
- Реализована поддержка выражения "ALTER TABLE DROP COLUMN" для удаления столбцов из таблицы и очистки ранее хранившихся в данном столбце данных.
- Расширена реализация операции UPSERT (добавить-или-модифицировать), позволяющей через выражения вида "INSERT ... ON CONFLICT DO NOTHING/UPDATE" игнорировать ошибку или выполнить обновление вместо вставки в случае невозможности добавления данных через "INSERT" (например, если запись уже существует, вместо INSERT можно выполнить UPDATE). В новой версии разрешено указание нескольких блоков "ON CONFLICT", которые будут обработаны в порядке следования. В последнем блоке "ON CONFLICT" разрешено не указывать параметр определения конфликта для использования "DO UPDATE".
- В операциях DELETE, INSERT и UPDATE реализована поддержка выражения RETURNING, при помощи которого можно вывести содержимое удалённой, вставленной или изменённой записи. Например, выражение "insert into ... returning id" вернёт идентификатор добавленной строки, а "update ... set price = price * 1.10 returning price" вернёт изменённое значение price.
- Для обобщённых табличных выражений (Common Table Expression, CTE), позволяющих использовать временные именованные результирующие наборы, задаваемые при помощи оператора WITH, разрешён выбор режимов "MATERIALIZED" и "NOT MATERIALIZED". "MATERIALIZED" подразумевает кэширование заданного в представлении запроса в отдельной физической таблице с последующей выборкой данных из этой таблицы, а при "NOT MATERIALIZED" при каждом обращении к представлению будут осуществляться повторные запросы. Изначально в SQLite по умолчанию использовался режим "NOT MATERIALIZED", но теперь для CTE, используемых более одного раза, изменён на "MATERIALIZED".
- Сокращено потребление памяти при выполнении операции VACUUM для БД, включающих очень большие значения с типами TEXT или BLOB.
- Проведена работа по увеличению производительности оптимизатора и планировщика запросов:
- Добавлены оптимизации при использовании функций min и max с выражением "IN".
- Ускорено выполнение оператора EXISTS.
- Реализовано развёртывание подзапросов из выражений UNION ALL, используемых в составе JOIN.
- Задействован индекс для выражений IS NOT NULL.
- Обеспечено преобразование "x IS NULL" и "x IS NOT NULL" в FALSE или TRUE для столбцов, имеющих признак "NOT NULL".
- Пропущена проверка внешних ключей в UPDATE, если операция не меняет столбцов, связанных с внешним ключом.
- Разрешено перемещение частей блока WHERE в подзапросы, содержащие оконные функции, если эти части ограничены работой с константами и копиями выражений из блоков "PARTITION BY", используемых в оконных функциях.
- Изменения в интерфейсе командной строки:
- Добавлена команда ".filectrl data_version".
- В командах ".once" и ".output" добавлена поддержка передачи вывода в обработчик, вызываемый с использованием неименованных каналов ("|").
- В команду ".stats" добавлены аргументы "stmt" и "vmstep" для вывода статистики по выражениям и счётчиков виртуальной машины.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.