Firefox a intégré la possibilité d'extraire des paramètres de suivi des URL

La sortie de la base de données EdgeDB 4.0 a été annoncée, mettant en œuvre un modèle de données relationnel et graphique ainsi qu'un langage de requête EdgeQL, optimisés pour le traitement de données hiérarchiques complexes. Le code est écrit en Python et Rust (pour le parseur et les parties critiques en termes de performance) et est distribué sous la licence Apache 2.0. Le projet évolue sous la forme d'une extension de PostgreSQL. Des bibliothèques clientes sont disponibles pour les langages Python, Go, Rust, .NET, Elixir et TypeScript/Javascript. Un ensemble d'outils en ligne de commande est fourni pour gérer la base de données et exécuter des requêtes de manière interactive (REPL).

EdgeDB utilise une approche déclarative basée sur des types d'objets plutôt qu'un modèle de données basé sur des tableaux. Au lieu de clés étrangères (foreign key) pour définir les relations entre les types, un système de liaison par références est utilisé (un objet peut être employé comme propriété d'un autre objet).

type Person { required name: str; } type Movie { required title: str; multi actors: Person; }

Pour accélérer le traitement des requêtes, des index peuvent être utilisés. Des fonctionnalités telles que la typage strict des propriétés, les contraintes de valeurs des propriétés, les propriétés calculées et les procédures stockées sont également supportées. Parmi les caractéristiques du schéma de stockage orienté objet d'EdgeDB, qui rappelle quelque peu les ORM, on note la possibilité de mélanger les schémas, de lier des propriétés provenant de différents objets et le support intégré de JSON.

Des outils intégrés pour la migration du schéma de stockage sont fournis — après modification du schéma, spécifié dans un fichier esdl séparé, il suffit d'exécuter la commande « edgedb migration create » et la base de données analysera les différences de schéma et générera de manière interactive un script pour passer au nouveau schéma. L'historique des modifications de schéma est automatiquement suivi.

Pour la création de requêtes, le langage de requête GraphQL ainsi que le langage propre à EdgeDB, qui est une adaptation de SQL pour les données hiérarchiques, sont supportés. Au lieu de listes, les résultats de la requête sont formatés de manière structurée, et au lieu de sous-requêtes et d'opérations JOIN, il est possible d'indiquer une requête EdgeQL en tant qu'expression au sein d'une autre requête. Les transactions et les boucles sont pris en charge.

sélectionnez Movie { titre, acteurs: { nom } } filtre .titre = «The Matrix» insérer Movie { titre := «The Matrix Resurrections», acteurs := ( sélectionner Personne filtre .nom dans { ‘Keanu Reeves’, ‘Carrie-Anne Moss’, ‘Laurence Fishburne’ } ) }

Dans la nouvelle version :

  • Ajout de la prise en charge de la recherche textuelle complète, mise en œuvre via un module plug-in fts. Pour transformer n'importe quel objet en document accessible à la recherche, il convient d'utiliser l'index fts::index, et pour rechercher une certaine phrase parmi les documents indexés, la fonction fts::search() a été proposée. Les résultats sont renvoyés sous la forme de tuples, contenant l'objet trouvé et son poids de recherche. Par exemple : type Item { requis disponible: bool { défaut := faux; }; requis nom: str; requis description: str; index fts::index sur ( fts::with_options( .nom, langue := fts::Language.eng ) ); } avec res := ( sélectionner fts::search(Item, ‘candy corn’, langue := ‘eng’) ) sélectionner res.object {nom, score := res.score} commander par res.score desc;
  • Ajout d'un nouveau type de données «multirange», définissant une ou plusieurs plages de valeurs pour représenter des intervalles discontinus. La normalisation des zones de chevauchement dans les plages définies est effectuée automatiquement. Le type «multirange» peut fonctionner avec toutes les fonctions et opérateurs précédemment disponibles pour le traitement des plages. sélectionner multirange([range(8, 10)]) + range(1, 5) — range(3, 4);
  • Ajout et activation par défaut de la prise en charge de l'authentification pour limiter l'accès à GraphQL et EdgeQL sur HTTP.
  • Pour démarrer le service d'authentification, fonctionnant séparément de l'instance de la base de données, une extension «auth» a été ajoutée, prenant en charge OAuth ou la connexion par e-mail et mot de passe.
  • Ajout de l'extension pgcrypto, fournissant des fonctions hmac, gen_salt et crypt pour le hachage et le chiffrement. sélectionner ext::pgcrypto::digest(‘encrypt this’, ‘sha1’);
  • Ajout de l'extension pg_trgm avec des fonctions pour déterminer la similarité des chaînes.
  • Des optimisations ont été apportées, permettant d'améliorer les performances. La consommation de mémoire a été le serveur réduite de 40%. Le code du parseur de requêtes EdgeQL a été réécrit en langage Rust.
  • Le langage EdgeQL a ajouté la prise en charge d'une syntaxe d'expressions conditionnelles plus familière (if … then .. else …). Il est désormais possible d'utiliser des DML conditionnels pour créer, mettre à jour et supprimer différents objets en fonction de conditions spécifiées. Les fonctions to_bytes(), to_str(), enc::base64_encode et enc::base64_decode ont été ajoutées. L'utilisation de l'expression « when » est autorisée dans les déclencheurs. select if count(Object) > 0 then 'got data' else 'no data'; select (select User filter .name = 'Alice') ?? (insert User { name := 'Alice' }); select enc::base64_encode(b'hello');
  • Un nouveau moyen de transmettre des valeurs globales dans les requêtes GraphQL a été ajouté — plutôt que d'utiliser un champ séparé, il est désormais possible de transmettre des variables basées sur l'objet __globals__.

    Source : opennet.ru
Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster