На 9 април беше пусната версия 3.53.0 на компактната кроссплатформена вградена СУБД SQLite. Проектният код е написан на C и се разпространява като обществено достояние (public domain).
Промени:
- Коригирана е грешка Буг за корупция на базата данни с WAL-рестарт. Виж предишната новина SQLite 3.51.3 с поправка на възможно повреждане на базата данни в режим WAL.
- Добавена е библиотека за форматиране на резултатите от SQL заявки Форматираща библиотека за резултати от заявки (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:
- sqlite3_str_truncate()
- sqlite3_str_free()
- sqlite3_carray_bind_v2()
- В функция sqlite3_prepare_v3() е добавена опция SQLITE_PREPARE_FROM_DDL, която позволява на имплементациите на виртуални таблици безопасно да подготвят SQL оператори, получени от схемата на базата данни.
- Добавена е константа SQLITE_UTF8_ZT, която може да се използва като параметър за кодиране в функциите sqlite3_result_text64() или sqlite3_bind_text64() за указание, че стойността е кодирана в UTF-8 и завършва с нула.
- В функция sqlite3_limit() е добавена опция SQLITE_LIMIT_PARSER_DEPTH.
- В функция sqlite3_db_config() е добавена опция SQLITE_DBCONFIG_FP_DIGITS. Също така вижте точка 9b по-долу.
- Подобрения в планиращия модул за запитвания:
- За 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.
Източник: linux.org.ru
