Опубліковано реліз SQLite 3.40, легковагої СУБД, оформленої у вигляді бібліотеки, що підключається. Код SQLite поширюється як суспільне багатство (public domain), тобто. може використовуватися без обмежень та безоплатно в будь-яких цілях. Фінансову підтримку розробників SQLite здійснює спеціально створений консорціум, до якого входять такі компанії, як Adobe, Oracle, Mozilla, Bentley та Bloomberg.
Основні зміни:
- Реалізовано експериментальну можливість компіляції SQLite у проміжний код WebAssembly, здатний запускатися у web-браузері та придатний для організації роботи з БД із web-додатків мовою JavaScript. Web-розробникам надається високорівневий об'єктно-орієнтований інтерфейс для роботи з даними в стилі sql.js або Node.js, обв'язування над низькорівневим C API та API на базі механізму Web Worker, що дозволяє створювати асинхронні обробники, що виконуються в окремих потоках. Дані, які веб-програми зберігають у WASM-версії SQLite, можуть бути збережені на стороні клієнта за допомогою OPFS (Origin-Private FileSystem) або API window.localStorage.
- Додано розширення recovery, призначене для відновлення даних із пошкоджених файлів із БД. В інтерфейсі командного рядка відновлення використовується команда «.recover».
- Поліпшено роботу планувальника запитів. Прибрано обмеження при використанні індексів з таблицями, що налічують понад 63 стовпці (раніше при операціях зі стовпцями, порядковий номер яких перевищує 63, індексація не застосовувалася). Поліпшено індексацію значень, що використовуються у виразах. Припинено завантаження з диска великих рядків та блобів під час обробки операторів NOT NULL та IS NULL. Виключена матеріалізація уявлень, для яких повне сканування виконується лише один раз.
- У кодовій базі замість типу "char*" для представлення імен файлів задіяний окремий тип sqlite3_filename.
- Додано внутрішню функцію sqlite3_value_encoding().
- Додано режим SQLITE_DBCONFIG_DEFENSIVE, який забороняє зміну версії схеми зберігання даних.
- У реалізацію параметра PRAGMA integrity_check додані додаткові перевірки. Наприклад, таблиці без ознаки STRICT не повинні містити числових значень у стовпцях з типом TEXT і рядкових значень з числами в стовпцях з типом NUMERIC. Також додано перевірку коректності порядку проходження рядків у таблицях з ознакою «WITHOUT ROWID».
- У виразі VACUUM INTO враховано налаштування PRAGMA synchronous.
- Додана збірна опція SQLITE_MAX_ALLOCATION_SIZE, що дозволяє обмежити розмір блоків під час розподілу пам'яті.
- Вбудований у SQLite алгоритм генерації псевдовипадкових чисел переведений із використання потокового шифру RC4 на Chacha20.
- Дозволено використання у різних схемах даних індексів з однаковими іменами.
- Внесено оптимізацію продуктивності, що дозволило знизити навантаження на CPU приблизно на 1% при типовій активності.
Джерело: opennet.ru