La version 3.46 de SQLite a été publiée, un SGBD léger sous forme de bibliothèque dynamique. Le code de SQLite est distribué comme domaine public, ce qui signifie qu'il peut être utilisé sans restrictions et gratuitement à des fins diverses. Le soutien financier des développeurs de SQLite est assuré par un consortium spécialement créé.
Principales modifications :
- Il est désormais possible d'utiliser le séparateur «_» dans les nombres pour une représentation plus claire des littéraux numériques (par exemple, 1_234_567).
- Une fonction SQL json_pretty() a été ajoutée pour générer une sortie plus lisible au format JSON, formatée avec des indentations.
- Les capacités de l'opération «PRAGMA optimize», qui optimise la base de données et tous les schémas de données pour une meilleure performance des requêtes, ont été étendues. Une limite de durée d'analyse de la base de données a été mise en place automatiquement, excluant un temps de traitement excessif pour les grandes bases de données. Un nouveau masque de bits «PRAGMA optimize(0x10000)» a été ajouté pour une vérification distincte des mises à jour dans toutes les tables. Une nouvelle analyse automatique des tables sans enregistrements sqlite_stat1 a été assurée.
- La fonction SQL strftime() prend désormais en charge les substitutions %G, %g, %U et %V.
- De nouveaux modificateurs ceiling et floor ont été ajoutés aux fonctions SQL pour travailler avec les dates et les heures, permettant la gestion des dates ambiguës lors de décalages de dates d'un certain nombre de mois ou d'années. Les modificateurs utc et localtime sont ignorés si SQLite sait que l'heure est déjà en format UTC ou localtime.
- Des optimisations ont été apportées au planificateur de requêtes. Pour les expressions INSERT contenant des milliers de valeurs dans la section VALUES, l'optimisation «VALUES-as-coroutine» est activée par défaut, permettant d'accélérer d'environ deux fois l'analyse de telles expressions et de réduire de moitié l'utilisation de la mémoire. Pour les requêtes du type «SELECT count(DISTINCT col) FROM …», l'utilisation des index est autorisée, même si la taille des enregistrements dans l'index est égale ou supérieure à celle des enregistrements dans la table. La logique de détermination des situations où les arguments des fonctions SQL contiennent des constantes a été améliorée. L'optimisation push-down pour les expressions WHERE contenant des sous-requêtes non liées a été également mise en place.
- La logique de traitement du débordement de la pile a été modifiée : lorsque le manque de mémoire pour la pile est détecté, le parseur tente désormais d'allouer de la mémoire supplémentaire dans le tas, plutôt que de renvoyer une erreur « débordement de la pile du parseur ».
- Dans JSON, l'utilisation de caractères de contrôle dans les littéraux de chaîne JSON5 est autorisée. La logique de fonctionnement des opérateurs « -> » et « >> » a été modifiée, lorsque l'opérande de chaîne à droite ne contient que des chiffres (de manière analogue à PostgreSQL, ces opérandes sont désormais traités comme des chaînes).
- Il est désormais possible d'utiliser de grands littéraux hexadécimaux dans la valeur DEFAULT des colonnes des tables.
Source : opennet.ru
