DBMS SQLite 3.31-ის გამოშვება გენერირებული სვეტების მხარდაჭერით

გამოქვეყნდა релиз SQLite 3.31.0, მსუბუქი DBMS, რომელიც შექმნილია როგორც დანამატის ბიბლიოთეკა. SQLite კოდი ნაწილდება საჯარო დომენის სახით, ე.ი. შეიძლება გამოყენებულ იქნას შეზღუდვების გარეშე და უფასოდ ნებისმიერი მიზნით. 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 ( 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

ახალი კომენტარის დამატება