Release der SQLite-Datenbank 3.31 mit Unterstützung für generierte Spalten

Veröffentlicht Release SQLite 3.31.0, eine leichtgewichtige DBMS, die als Plug-in-Bibliothek implementiert ist. Der Code von SQLite wird als Gemeinbesitz (public domain) verbreitet, d.h. er kann ohne Einschränkungen und kostenlos für beliebige Zwecke verwendet werden. Die finanzielle Unterstützung der SQLite-Entwickler erfolgt durch ein speziell gegründetes Konsortium, zu dem Unternehmen wie Adobe, Oracle, Mozilla, Bentley und Bloomberg gehören.

Haupt- Änderungen:

  • Unterstützung hinzugefügt für generierte Spalten (berechnete Spalten), die es ermöglichen, beim Erstellen einer Tabelle eine Spalte zu definieren, deren Wert automatisch auf der Grundlage des Inhalts einer anderen Spalte berechnet wird. Generierte Spalten können sowohl virtuell (bei jedem Zugriff dynamisch erstellt) als auch in der DB gespeichert werden (bei jeder Aktualisierung der verbundenen Spalten gespeichert). Der Inhalt generierter Spalten ist nur im Nur-Lese-Modus verfügbar (Änderungen erfolgen nur durch Modifikation des Wertes in einer anderen Spalte, die bei der Berechnung verwendet wird). Zum Beispiel:

    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 hinzugefügt trusted_schema, Einstellung SQLITE_DBCONFIG_TRUSTED_SCHEMA und die Build-Option „-DSQLITE_TRUSTED_SCHEMA“, die es ermöglichen, den Schutz vor Angriffe über Modifikationen des Datenbank-Schemas zu steuern. Bei aktivem Schutz wird die Verwendung von SQL-Funktionen (die nicht als SQLITE_INNOCUOUS gekennzeichnet sind) in Triggern, Views, CHECK- und DEFAULT-Ausdrücken, Indizes und generierten Spalten eingeschränkt. Auch die Verwendung von virtuellen Tabellen in Triggern und Views wird deaktiviert, sofern die virtuelle Tabelle nicht ausdrücklich mit dem Flag SQLITE_VTAB_INNOCUOUS deklariert ist.
  • Die Möglichkeit wurde implementiert, bestimmten SQL-Funktionen in Anwendungen Eigenschaften zuzuweisen SQLITE_INNOCUOUS (harmlos Funktionen, die nicht von externen Parametern abhängen und nicht für böswillige Aktionen verwendet werden können) und SQLITE_DIRECTONLY (nur direkte Aufrufe in SQL-Abfragen, ohne die Möglichkeit, sie in Triggern, Views und Datenschemas zu verwenden);
  • Ein Modul hinzugefügt uuid mit Implementierung von Funktionen zur Verarbeitung von UUID (RFC-4122);
  • PRAGMA hinzugefügt hard_heap_limit und die Funktion sqlite3_hard_heap_limit64() zur Steuerung der maximalen Heapgröße;
  • In PRAGMA function_list wurden Typ, Eigenschaften und Anzahl der Argumente jeder Funktion hinzugefügt;
  • In die virtuelle Tabelle DBSTAT wurde hinzugefügt Aggregationsmodus der Daten;
  • In sqlite3_open_v2() wurde die Option SQLITE_OPEN_NOFOLLOW implementiert, die das Öffnen symbolischer Links verbietet;
  • Für das Argument PATH, das an Funktionen zur JSON-Verarbeitung übergeben wird, wurde die Unterstützung der Array-Notation „#-N“ hinzugefügt;
  • Im Speicherverwaltungssystem lookaside Es wurde Unterstützung für zwei separate Speicherpools implementiert, von denen jeder zur Zuweisung von Blöcken unterschiedlicher Größe verwendet werden kann (die Trennung ermöglicht eine erweiterte Anwendung des Lookaside-Systems, während die Größe des für jede Verbindung zugewiesenen Puffers von 120 auf 48 KB reduziert wird);
  • Unterstützung für PRAGMA wurde eingestellt legacy_file_format, die nicht mit VACUUM, generierten Spalten und abnehmenden Indizes kompatibel war (die Unterstützung des veralteten Formats kann über das Flag SQLITE_DBCONFIG_LEGACY_FILE_FORMAT in sqlite3_db_config() zurückgebracht werden).

Quelle: opennet.ru

60GB SSD 8Gb DDR4