La version 3.40 de SQLite a été publiée, une base de données légère, présentée sous la forme d'une bibliothèque dynamique. Le code de SQLite est dans le domaine public, ce qui signifie qu'il peut être utilisé sans limitations et gratuitement à toutes fins. Le consortium spécialement créé pour soutenir financièrement les développeurs de SQLite comprend des entreprises telles qu'Adobe, Oracle, Mozilla, Bentley et Bloomberg.
Principales modifications :
- Une fonctionnalité expérimentale de compilation de SQLite en code intermédiaire WebAssembly a été mise en œuvre, permettant d'être exécutée dans un navigateur web et appropriée pour gérer les bases de données à partir d'applications web en JavaScript. Les développeurs web bénéficient d'une interface orientée objet de haut niveau pour travailler avec les données dans le style de sql.js ou Node.js, une couche au-dessus de l'API C de bas niveau et une API basée sur le mécanisme Web Worker, permettant de créer des gestionnaires asynchrones exécutés dans des threads séparés. Les données que les applications web sauvegardent dans la version WASM de SQLite peuvent être stockées côté client à l'aide d'OPFS (Origin-Private FileSystem) ou de l'API window.localStorage.
- Une extension de récupération a été ajoutée, destinée à restaurer des données à partir de fichiers de base de données corrompus. Dans l'interface de ligne de commande, la commande « .recover » est utilisée pour la récupération.
- L'optimisation du planificateur de requêtes a été améliorée. Les limitations d'utilisation des index avec des tables contenant plus de 63 colonnes ont été supprimées (auparavant, lors des opérations sur des colonnes dont le numéro ordinal dépasse 63, l'indexation n'était pas appliquée). L'indexation des valeurs utilisées dans les expressions a été améliorée. Le chargement depuis le disque de longues chaînes et blobs lors du traitement des opérateurs NOT NULL et IS NULL a été interrompu. La matérialisation des vues pour lesquelles un scan complet n'est effectué qu'une seule fois a été exclue.
- Dans le code, un type séparé sqlite3_filename a été utilisé au lieu du type « char * » pour représenter les noms de fichiers.
- Une fonction interne sqlite3_value_encoding() a été ajoutée.
- Le mode SQLITE_DBCONFIG_DEFENSIVE a été ajouté, interdisant la modification de la version du schéma de stockage des données.
- La mise en œuvre du paramètre « PRAGMA integrity_check » a été enrichie avec des vérifications supplémentaires. Par exemple, les tables sans l'indicateur STRICT ne doivent pas contenir de valeurs numériques dans des colonnes de type TEXT et de valeurs textuelles avec des nombres dans des colonnes de type NUMERIC. Une vérification de la validité de l'ordre des lignes dans les tables avec l'indicateur « WITHOUT ROWID » a également été ajoutée.
- L'expression « VACUUM INTO » prend désormais en compte les paramètres « PRAGMA synchronous ».
- Une option de compilation SQLITE_MAX_ALLOCATION_SIZE a été ajoutée pour limiter la taille des blocs lors de l'allocation de mémoire.
- L'algorithme intégré de génération de nombres pseudo-aléatoires dans SQLite a été modifié, passant d'un chiffrement par flux RC4 à Chacha20.
- L'utilisation d'index avec des noms identiques dans différents schémas de données est désormais autorisée.
- Des optimisations de performance ont été apportées, permettant de réduire la charge CPU d'environ 1 % lors d'une activité typique.
Source : opennet.ru
