Випуск СУБД SQLite 3.35

Опубліковано реліз 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

Додати коментар або відгук