Издаден е релиз SQLite 3.35, леко натоварена СУБД, организирана като плъгин библиотека. Кодът на SQLite се разпространява като обществено достояние, т.е. може да се използва без ограничения и безплатно за всякакви цели. Финансовата подкрепа на разработчиците на 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“ за извеждане на статистики по изрази и счетоводители на виртуалната машина.
Източник: opennet.ru
