Die Version SQLite 3.35 ist erschienen. Dies ist eine leichtgewichtige Datenbank, die als dynamische Bibliothek implementiert ist. Der SQLite-Code wird als Gemeinfreiheit (public domain) vertrieben, 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 eigens gegründetes Konsortium, zu dem Unternehmen wie Adobe, Oracle, Mozilla, Bentley und Bloomberg gehören.
Wesentliche Änderungen:
- Es wurden integrierte mathematische Funktionen (log2(), cos(), tg(), exp(), ln(), pow() usw.) hinzugefügt, die in SQL verwendet werden können. Um die integrierten Funktionen zu aktivieren, ist eine Kompilierung mit der Option „-DSQLITE_ENABLE_MATH_FUNCTIONS“ erforderlich.
- Unterstützung für den Ausdruck „ALTER TABLE DROP COLUMN“ wurde implementiert, um Spalten aus einer Tabelle zu löschen und zuvor gespeicherte Daten in dieser Spalte zu bereinigen.
- Die Implementierung der UPSERT-Operation (einfügen oder ändern) wurde erweitert, um durch Ausdrücke wie „INSERT … ON CONFLICT DO NOTHING/UPDATE“ entweder einen Fehler zu ignorieren oder eine Aktualisierung anstelle einer Einfügung durchzuführen, wenn Daten über „INSERT“ nicht hinzugefügt werden können (z. B. wenn der Datensatz bereits existiert, kann anstelle von INSERT ein UPDATE durchgeführt werden). In der neuen Version ist es erlaubt, mehrere „ON CONFLICT“-Blöcke anzugeben, die in der Reihenfolge bearbeitet werden. Im letzten „ON CONFLICT“-Block ist es erlaubt, den Konfliktbestimmungspunkt für „DO UPDATE“ wegzulassen.
- In den Operationen DELETE, INSERT und UPDATE wurde die Unterstützung des RETURNING-Ausdrucks implementiert, mit dem der Inhalt des gelöschten, eingefügten oder geänderten Datensatzes ausgegeben werden kann. Zum Beispiel gibt der Ausdruck „insert into … returning id“ die ID der hinzugefügten Zeile zurück, während „update … set price = price * 1.10 returning price“ den geänderten Preis zurückgibt.
- Für gemeinsame tabellarische Ausdrücke (Common Table Expression, CTE), die temporäre benannte Ergebnismengen mithilfe der WITH-Anweisung ermöglichen, sind die Modi „MATERIALIZED“ und „NOT MATERIALIZED“ zulässig. „MATERIALIZED“ bedeutet, dass das in der Ansichtsabfrage angegebene Ergebnis in einer separaten physischen Tabelle zwischengespeichert wird, aus der die Daten anschließend abgerufen werden. Bei „NOT MATERIALIZED“ werden bei jedem Zugriff auf die Ansicht erneut Abfragen durchgeführt. Ursprünglich wurde in SQLite standardmäßig der Modus „NOT MATERIALIZED“ verwendet, aber jetzt wurde er für CTEs, die mehr als einmal verwendet werden, auf „MATERIALIZED“ geändert.
- Der Speicherverbrauch bei der Ausführung der VACUUM-Operation für Datenbanken, die sehr große Werte mit den Typen TEXT oder BLOB enthalten, wurde reduziert.
- Es wurden Arbeiten zur Leistungssteigerung des Optimierers und des Abfrageplaners durchgeführt:
- Optimierungen bei der Verwendung der Funktionen min und max mit dem Ausdruck „IN“ wurden hinzugefügt.
- Die Ausführung des EXISTS-Befehls wurde beschleunigt.
- Die Entfaltung von Unterabfragen aus UNION ALL-Ausdrücken in JOINs wurde implementiert.
- Ein Index für Ausdrücke IS NOT NULL wurde verwendet.
- Die Umwandlung von „x IS NULL“ und „x IS NOT NULL“ in FALSE oder TRUE für Spalten mit dem Attribut „NOT NULL“ wurde sichergestellt.
- Die Überprüfung von Fremdschlüsseln wurde bei UPDATE-Vorgängen übersprungen, wenn die Operation keine mit dem Fremdschlüssel verbundenen Spalten verändert.
- Es ist erlaubt, Teile der WHERE-Klausel in Unterabfragen zu verschieben, die Fensterfunktionen enthalten, solange diese Teile auf Konstanten und Kopien von Ausdrücken aus den "PARTITION BY"-Klauseln beschränkt sind, die in den Fensterfunktionen verwendet werden.
- Änderungen in der Befehlszeilenschnittstelle:
- Der Befehl „.filectrl data_version“ wurde hinzugefügt.
- In den Befehlen „.once“ und „.output“ wurde die Unterstützung für die Übergabe von Ausgaben an einen Handler hinzugefügt, der mit nicht benannten Kanälen („|“) aufgerufen wird.
- Der Befehl „.stats“ wurde um die Argumente „stmt“ und „vmstep“ erweitert, um Statistiken zu Ausdrücken und Zähler der virtuellen Maschine auszugeben.
Quelle: opennet.ru
