La version 3.42 de SQLite a été publiée, une base de données légère sous forme de bibliothèque dynamique. Le code de SQLite est distribué dans le domaine public, c'est-à-dire qu'il peut être utilisé sans restrictions et gratuitement à des fins quelconques. Le soutien financier des développeurs de SQLite est assuré par un consortium spécialement créé, qui comprend des entreprises telles qu'Adobe, Oracle, Mozilla, Bentley et Bloomberg.
Principales modifications :
- Pour les index textuels FTS5, la commande secure-delete a été implémentée, qui nettoie complètement toutes les données résiduelles après suppression.
- Les fonctions de traitement des données au format JSON ont ajouté le support des extensions JSON5.
- L'optimiseur de requêtes a été amélioré. L'optimisation « count-of-view » est activée par défaut. Le traitement des colonnes inutilisées dans les sous-requêtes a été exclu. L'implémentation de l'optimisation push-down a été améliorée.
- Une option « —unsafe-testing » a été ajoutée à l'interface de ligne de commande, permettant d'utiliser certaines commandes dangereuses, telles que « .testctrl », destinées à être utilisées lors de tests. En mode sûr (« —safe »), l'utilisation des commandes « .log on » et « .log off » est autorisée. Un séparateur « — » a été ajouté, après lequel le traitement des options est désactivé. Les paramètres « :inf » et « :nan » liés aux valeurs infinis et NaN ont été ajoutés.
- Les noms des fonctions SQL définies côté application peuvent maintenant être croisées avec les mots-clés CROSS, FULL, INNER, LEFT, NATURAL, OUTER et RIGHT.
- Les capacités de PRAGMA integrity_check ont été étendues. Une vérification de la valeur NaN dans les colonnes avec la condition NOT NULL a été ajoutée. L'informativité des messages d'erreur a été améliorée.
- Dans le complément de session, l'interception des modifications des tables sans ROWID est autorisée.
- Dans les fonctions de manipulation du temps et des dates, un modificateur « subsec » a été ajouté pour permettre l'utilisation de fractions de seconde.
- La profondeur de récursion pour les tableaux et objets JSON a été réduite par défaut de 2000 à 1000.
De plus, une version du SGBD DuckDB 0.8.0 a été publiée, développant une variante de SQLite, enrichie de fonctionnalités et d'optimisations pour l'exécution de requêtes analytiques couvrant une grande partie des données stockées, par exemple, réalisant l'agrégation de tout le contenu des tables ou fusionnant plusieurs grandes tables. Un dialecte étendu du langage SQL est fourni, incluant des fonctionnalités supplémentaires pour traiter des requêtes très complexes et de longue durée, ainsi que le support de types complexes (tableaux, structures, unions), l'exécution simultanée de plusieurs requêtes et l'exécution de requêtes directement à partir de fichiers au format CSV, JSON et Parquet. Il est possible d'importer depuis le SGBD PostgreSQL.
En plus du code de la couche de commande d'SQLite, le projet utilise un analyseur qui a été séparé en une bibliothèque distincte de PostgreSQL, le composant Date Math de MonetDB, sa propre réalisation des fonctions de fenêtre (basée sur l'algorithme Segment Tree Aggregation), un gestionnaire d'expressions régulières basé sur la bibliothèque RE2, son propre optimiseurs de requêtes, un mécanisme MVCC de contrôle de la concurrence (Multi-Version Concurrency Control), ainsi qu'un moteur d'exécution de requêtes vectorisé basé sur l'algorithme Hyper-Pipelining Query Execution, permettant de traiter en une seule opération de grands ensembles de valeurs. Le code du projet est distribué sous la licence MIT.
Dans la nouvelle version de DuckDB :
- De nouvelles expressions « PIVOT » et « UNPIVOT » ont été ajoutées pour transformer des lignes en colonnes et vice versa.
- Le parallélisme lors de l'importation et de l'exportation de données a été amélioré. Par défaut, la lecture à partir de fichiers au format CSV est réalisée en plusieurs fils et l'écriture multithread lors de l'utilisation des formats Parquet, CSV et JSON.
- L'opérateur « ** » a été ajouté pour le parcours récursif des répertoires lors de la définition des chemins de fichiers (par exemple, FROM ‘data/glob/crawl/stackoverflow/**/*.csv’).
- Le support des opérations de fusion (JOIN) pour les données sous forme de séries temporelles (tranches de valeurs aux intervalles spécifiés) a été ajouté, où le critère de fusion des enregistrements utilise une correspondance approximative des valeurs dans le champ temporel (par exemple, il est possible de fusionner des enregistrements dont les temps diffèrent de pas plus d'une minute).
- Le chargement paresseux des métadonnées de la base de données a été implémenté, permettant d'accélérer le démarrage du SGBD de plusieurs dizaines de fois.
- Ajout du support pour la connexion de fonctions personnalisées en Python.
- Ajout du support pour l'API ADBC (Arrow Database Connectivity) pour le transfert de données en utilisant Apache Arrow.
- Intégration de l'attache pour le code en Swift.
- Le comportement de l'opérateur de division ('/') a été modifié pour effectuer par défaut des calculs en virgule flottante au lieu des opérations entières. Un nouvel opérateur '//' est proposé pour la division entière. L'ancien comportement peut être rétabli par le réglage 'SET integer_division=true;'.
- La méthode de gestion des enregistrements nuls lors du tri a été changée de 'NULLS FIRST' à 'NULLS LAST', c'est-à-dire que les valeurs NULL apparaîtront maintenant à la fin de la liste plutôt qu'au début. L'ancien comportement peut être rétabli par le réglage 'SET default_null_order='nulls_first';'.
De plus, on peut noter le projet CG/SQL développé par Facebook, qui fournit un générateur de code pour l'utilisation des procédures stockées avec SQLite. CG/SQL permet de rédiger des procédures stockées dans un dialecte spécial de T-SQL (Transact-SQL), autorisant l'appel de fonctions de la bibliothèque standard en C et l'accès aux données dans SQLite. Les procédures stockées créées sont compilées en code C, utilisant l'API C de SQLite pour effectuer les actions requises et traiter des requêtes complexes. Les procédures stockées compilées peuvent être connectées à des programmes en C, Java et Objective-C. Le code du projet est écrit en C et est diffusé sous une licence MIT.
Source : opennet.ru
