Wydanie DBMS SQLite 3.31 z obsługą generowanych kolumn

opublikowany wydanie SQLite 3.31.0, lekki system DBMS zaprojektowany jako biblioteka wtyczek. Kod SQLite jest rozpowszechniany jako domena publiczna, tj. można z nich korzystać bez ograniczeń i bezpłatnie w dowolnym celu. Wsparcie finansowe dla programistów SQLite zapewnia specjalnie utworzone konsorcjum, w skład którego wchodzą takie firmy jak Adobe, Oracle, Mozilla, Bentley i Bloomberg.

Głównym zmiany:

  • Dodano wsparcie wygenerowane kolumny (kolumny obliczeniowe), które umożliwiają zdefiniowanie kolumny podczas tworzenia tabeli, której wartość jest automatycznie obliczana na podstawie zawartości innej kolumny. Wygenerowane kolumny mogą być wirtualne (generowane na bieżąco przy każdym dostępie) lub przechowywane w bazie danych (zapisywane przy każdej aktualizacji powiązanych kolumn). Zawartość wygenerowanych kolumn dostępna jest wyłącznie w trybie odczytu (zmiany dokonuje się jedynie poprzez modyfikację wartości w innej kolumnie biorącej udział w obliczeniach). Na przykład:

    UTWÓRZ TABELĘ t1(
    KLUCZ PODSTAWOWY LICZBY CAŁKOWITEJ,
    b INT,
    c TEKST,
    d INT GENEROWANY ZAWSZE JAKO (a*abs(b)) WIRTUALNY,
    e TEKST GENEROWANY ZAWSZE JAKO (substr(c,b,b+1)) PRZECHOWYWANY
    );

  • Dodano PRAGMĘ zaufany_schemat, ustawienie SQLITE_DBCONFIG_TRUSTED_SCHEMA oraz opcję montażu „-DSQLITE_TRUSTED_SCHEMA”, która pozwala kontrolować włączenie ochrony przed ataki poprzez modyfikację schematu danych w bazie danych. Aktywna ochrona ogranicza użycie funkcji SQL (nieoznaczonych SQLITE_INNOCUOUS) w wyzwalaczach, widokach, instrukcjach CHECK i DEFAULT, indeksach i generowanych kolumnach. Korzystanie z tabel wirtualnych w wyzwalaczach i widokach jest również wyłączone, chyba że tabela wirtualna jest jawnie zadeklarowana za pomocą flagi SQLITE_VTAB_INNOCUOUS.
  • Zaimplementowano możliwość przypisania właściwości do funkcji SQL zdefiniowanych w aplikacjach SQLITE_INNOCUOUS (nieszkodliwe funkcje, które nie zależą od parametrów zewnętrznych i nie mogą służyć do wykonywania złośliwych działań) i SQLITE_DIRECTONLY (tylko bezpośrednie wywołanie w zapytaniach SQL, bez możliwości wykorzystania w wyzwalaczach, widokach i diagramach struktury danych);
  • Dodany moduł uuid z implementacją funkcji przetwarzania UUID (RFC-4122);
  • Dodano PRAGMĘ hard_heap_limit i funkcji sqlite3_hard_heap_limit64() kontrolować maksymalny rozmiar sterty;
  • W PRAGMIE lista_funkcji dodano wyjście typu, właściwości i liczby argumentów każdej funkcji;
  • Do wirtualnej tabeli DBSTAT dodany tryb agregacji danych;
  • sqlite3_open_v2() implementuje opcję SQLITE_OPEN_NOFOLLOW, która pozwala wyłączyć otwieranie dowiązań symbolicznych;
  • Dla argumentacji PATH, przekazany do funkcji JSON, dodano obsługę notacji tablicowej „#-N”;
  • W systemie dystrybucji pamięci spojrzenie z boku zaimplementowano obsługę dwóch oddzielnych pul pamięci, z których każda może służyć do alokacji bloków o różnej wielkości (separacja pozwala na rozszerzenie wykorzystania systemu lookaside, przy jednoczesnym zmniejszeniu wielkości bufora przydzielanego każdemu połączeniu ze 120 do 48 KB);
  • Wsparcie PRAGMA zostało przerwane starszy_format_pliku, który był niezgodny z VACUUM, wygenerował kolumny i indeksy malejące (obsługę starszego formatu można zwrócić za pomocą flagi SQLITE_DBCONFIG_LEGACY_FILE_FORMAT w funkcji sqlite3_db_config()).

Źródło: opennet.ru

Dodaj komentarz