Die SQLite-Version 3.46 wurde veröffentlicht, eine leichtgewichtige Datenbank in Form einer Plug-in-Bibliothek. Der SQLite-Code steht als Public Domain zur Verfügung, 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.
Wesentliche Änderungen:
- Es wurde die Möglichkeit geschaffen, den Separator „_“ in Zahlen zu verwenden, um die Darstellung von numerischen Literalen zu verbessern (z.B. 1_234_567).
- Die SQL-Funktion json_pretty() wurde hinzugefügt, um eine leserlichere Ausgabe im JSON-Format zu generieren, die mit Blockeinrückungen formatiert ist.
- Die Funktionalitäten des Befehls „PRAGMA optimize“, der die Datenbank und alle Datenschemata optimiert, um die beste Abfrageleistung zu erreichen, wurden erweitert. Ein automatisch angewendetes Limit für die Analysezeit der Datenbank wurde implementiert, um zu große Verarbeitungszeiten bei großen Datenbanken zu vermeiden. Eine neue Bitmaske „PRAGMA optimize(0x10000)“ wurde hinzugefügt, um Updates in allen Tabellen gezielt zu überprüfen. Eine automatische erneute Analyse der Tabellen, in denen keine Datensätze von sqlite_stat1 fehlen, wurde sichergestellt.
- Die SQL-Funktion strftime() unterstützt jetzt die Platzhalter %G, %g, %U und %V.
- In den SQL-Funktionen zur Arbeit mit Datums- und Zeitangaben wurden neue Modifizierer ceiling und floor hinzugefügt, um die Verarbeitung mehrdeutiger Daten zu steuern, die bei Datumsverschiebungen um bestimmte Monate oder Jahre auftreten. Modifizierer wie utc und localtime werden ignoriert, wenn SQLite über Informationen verfügt, dass die Zeit bereits im UTC- oder localtime-Format vorliegt.
- Optimierungen wurden im Abfrageplaner vorgenommen. Für INSERT-Ausdrücke mit Tausenden von Werten im VALUES-Bereich ist standardmäßig die Optimierung 'VALUES-as-coroutine' aktiviert, die die Analyse solcher Ausdrücke ungefähr verdoppelt beschleunigt und den Speicherverbrauch halbiert. Bei Abfragen wie 'SELECT count(DISTINCT col) FROM ...' ist die Verwendung von Indizes erlaubt, auch wenn die Größe der Einträge im Index nicht kleiner ist als die der Einträge in der Tabelle. Die Logik zur Bestimmung von Situationen, in denen in den Argumenten von SQL-Funktionen Konstanten angegeben werden, wurde verbessert. Eine Push-Down-Optimierung für WHERE-Ausdrücke mit nicht zusammenhängenden Unterabfragen wurde implementiert.
- Die Logik zur Behandlung von Stack-Überläufen wurde geändert – wenn der Parser nicht genügend Speicher für den Stack findet, versucht er nun, zusätzlichen Speicher aus dem Heap zuzuweisen, anstatt einen Fehler "parser stack overflow" auszugeben.
- In JSON ist die Angabe von Steuerzeichen in stringlichen Literalen gemäß JSON5 erlaubt. Die Logik der Operatoren „->“ und „->>“ wurde geändert, sodass sie jetzt bei rechten stringlichen Operanden, die nur Ziffern enthalten (ähnlich wie in PostgreSQL), als Zeichenkette verarbeitet werden.
- In den DEFAULT-Werten von Tabellenspalten ist die Angabe von großen hexadezimalen Literalen erlaubt.
Quelle: opennet.ru
