Реліз СУБД SQLite 3.31 з підтримкою стовпців, що генеруються.

Опубліковано реліз SQLite 3.31.0, легковажний СУБД, оформлений у вигляді бібліотеки, що підключається. Код SQLite поширюється як суспільне багатство (public domain), тобто. може використовуватися без обмежень та безоплатно в будь-яких цілях. Фінансову підтримку розробників SQLite здійснює спеціально створений консорціум, до якого входять такі компанії, як Adobe, Oracle, Mozilla, Bentley та Bloomberg.

Основні зміни:

  • Додана підтримка генерованих стовпців (обчислюваних стовпців), що дозволяють при створенні таблиці визначити стовпець, значення якого автоматично обчислюється на основі іншого стовпця. Стовпці, що генеруються, можуть бути як віртуальними (формуються на льоту при кожному зверненні), так і зберігаються в БД (зберігаються при кожному оновленні пов'язаних стовпців). Вміст стовпців, що генеруються, доступний тільки в режимі читання (зміна проводиться тільки через модифікацію значення в іншому стовпці, задіяному при обчисленні). Наприклад:

    CREATE TABLE t1(
    a INTEGER PRIMARY KEY,
    b INT,
    c TEXT,
    d INT GENERATED ALWAYS AS (a*abs(b)) VIRTUAL,
    e TEXT GENERATED ALWAYS AS (substr(c,b,b+1)) STORED
    );

  • Додані PRAGMA trusted_schema, налаштування SQLITE_DBCONFIG_TRUSTED_SCHEMA та збірна опція «-DSQLITE_TRUSTED_SCHEMA», що дозволяють керувати включенням захисту від атак через модифікацію схеми даних БД. При активному захисті обмежується використання SQL-функцій (не помічених як SQLITE_INNOCUOUS) у тригерах, уявленнях, виразах CHECK та DEFAULT, індексах та стовпцях, що генеруються. Також вимикається використання віртуальних таблиць у тригерах та уявленнях, якщо віртуальна таблиця явно не оголошена з прапором SQLITE_VTAB_INNOCUOUS.
  • Реалізовано можливість присвоєння певним у додатках SQL-функцій властивостей SQLITE_INNOCUOUS (нешкідливі функції, які не залежать від зовнішніх параметрів та не можуть використовуватися для здійснення шкідливих дій) та SQLITE_DIRECTONLY (тільки прямий виклик у SQL-запитах, без можливості застосування в тригерах, уявленнях та схемах структури даних);
  • Доданий модуль uuid з реалізацією функцій обробки UUID ( RFC-4122);
  • Додано PRAGMA hard_heap_limit і функція sqlite3_hard_heap_limit64() для керування максимальним розміром купи;
  • У PRAGMA function_list додано висновок типу, властивостей та числа аргументів кожної функції;
  • У віртуальну таблицю DBSTAT доданий режим агрегування даних;
  • У sqlite3_open_v2() реалізовано опцію SQLITE_OPEN_NOFOLLOW, що дозволяє заборонити відкриття символічних посилань;
  • Для аргументу PATH, що передається в JSON-функції, додано підтримку нотації масивів «#-N»;
  • У системі розподілу пам'яті lookaside реалізована підтримка двох окремих пулів пам'яті, кожен з яких може використовуватися для виділення блоків різного розміру (поділ дозволяє розширити застосування системи lookaside, при цьому знизивши розмір буфера, що виділяється на кожне з'єднання, з 120 до 48 КБ);
  • Припинено підтримку PRAGMA legacy_file_format, яка була несумісна з VACUUM, генерованими стовпцями та спадними індексами (підтримку застарілого формату можна повернути через прапор SQLITE_DBCONFIG_LEGACY_FILE_FORMAT у sqlite3_db_config()).

Джерело: opennet.ru

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