Erscheinung der SQLite DB 3.35

Die Veröffentlichung von SQLite 3.35, einer schlanken DB, die als Plug-in-Bibliothek bereitgestellt wird, wurde bekannt gegeben. Der Quellcode von SQLite wird als Public Domain veröffentlicht, d.h. er kann uneingeschränkt und kostenlos für jede Anwendung verwendet werden. Die finanzielle Unterstützung der SQLite-Entwickler wird von einem speziell gegründeten Konsortium übernommen, zu dem Unternehmen wie Adobe, Oracle, Mozilla, Bentley und Bloomberg gehören.

Hauptä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 ein Build mit der Option „-DSQLITE_ENABLE_MATH_FUNCTIONS“ erforderlich.
  • Die Unterstützung für den Ausdruck „ALTER TABLE DROP COLUMN“ wurde implementiert, um Spalten aus einer Tabelle zu entfernen und zuvor in dieser Spalte gespeicherte Daten zu bereinigen.
  • Die Implementierung der UPSERT-Operation (einfügen-oder-modifizieren) wurde erweitert, sodass über Ausdrücke wie „INSERT … ON CONFLICT DO NOTHING/UPDATE“ der Fehler ignoriert oder ein Update anstelle eines Einfügens durchgeführt werden kann, wenn das Hinzufügen von Daten über „INSERT“ nicht möglich ist (zum Beispiel, 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 verarbeitet werden. Im letzten „ON CONFLICT“-Block ist es erlaubt, den Konfliktparameter für die Verwendung von „DO UPDATE“ nicht anzugeben.
  • In den Operationen DELETE, INSERT und UPDATE wurde die Unterstützung des Ausdrucks RETURNING implementiert, mit dem der Inhalt eines 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, und „update … set price = price * 1.10 returning price“ gibt den aktualisierten Preis zurück.
  • Für die allgemeinen tabellarischen Ausdrücke (Common Table Expression, CTE), die temporäre benannte Ergebnismengen ermöglichen, die mit der WITH-Anweisung definiert werden, wurden die Modusauswahlen „MATERIALIZED“ und „NOT MATERIALIZED“ genehmigt. „MATERIALIZED“ impliziert, dass das in der Sicht definierte Abfrageergebnis in einer separaten physischen Tabelle zwischengespeichert wird, wobei die Daten aus dieser Tabelle abgerufen werden, während bei „NOT MATERIALIZED“ bei jedem Zugriff auf die Sicht wiederholte Abfragen durchgeführt werden. Ursprünglich wurde in SQLite standardmäßig der Modus „NOT MATERIALIZED“ verwendet, aber nun wurde er für CTE, die mehr als einmal verwendet werden, auf „MATERIALIZED“ geändert.
  • Der Speicherverbrauch während der Ausführung der VACUUM-Operation für Datenbanken mit sehr großen TEXT- oder BLOB-Werten wurde reduziert.
  • Es wurden Arbeiten zur Verbesserung der Leistung des Optimierers und des Abfrageplans durchgeführt:
    • Optimierungen wurden bei der Verwendung der Funktionen min und max mit dem Ausdruck „IN“ hinzugefügt.
    • Die Ausführung des EXISTS-Operators wurde beschleunigt.
    • Unterabfragen aus UNION ALL-Ausdrücken, die in JOINs verwendet werden, wurden implementiert.
    • Ein Index wurde für IS NOT NULL-Ausdrücke 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 in UPDATE wurde übersprungen, wenn die Operation keine Spalten ändert, die mit dem Fremdschlüssel verbunden sind.
    • Das Verschieben von Teilen der WHERE-Klausel in Unterabfragen, die Fensterfunktionen enthalten, wurde erlaubt, wenn diese Teile auf Konstanten und Kopien von Ausdrücken aus den „PARTITION BY“-Klauseln, die in Fensterfunktionen verwendet werden, beschränkt sind.
  • Änderungen der Befehlszeilenschnittstelle:
    • Der Befehl „.filectrl data_version“ wurde hinzugefügt.
    • In den Befehlen „.once“ und „.output“ wurde die Unterstützung für die Weitergabe der Ausgabe an einen Handler, der über benannte Pipes („|“) aufgerufen wird, hinzugefügt.
    • Dem Befehl „.stats“ wurden die Argumente „stmt“ und „vmstep“ zur Ausgabe von Statistiken über Ausdrücke und Zähler der virtuellen Maschine hinzugefügt.

Quelle: opennet.ru

60GB SSD 8Gb DDR4