Обявен е релиз 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“ за извеждане на статистики по изрази и броячи на виртуалната машина.
Източник: opennet.ru
