Bonjour à tous,
J'ai besoin de votre aide pour tester la version BETA de QxOrm 1.2.4.
Le moteur permettant de fetcher les relations a beaucoup évolué, et il faut vérifier en priorité qu'il n'y a aucune régression par rapport à la version 1.2.3.
J'ai fais des tests unitaires de mon côté (sous Windows et Linux) et je n'ai pas constaté de régression.
L'idéal serait de tester avec les applications que vous avez écrites dépendantes de la bibliothèque QxOrm...
Voici le lien de téléchargement de la version QxOrm 1.2.4 BETA XX :
http://www.qxorm.com/version/QxOrm_1.2.4_BETA_23.zip
Dans cette version, il est possible de fetcher plusieurs niveaux de relations (dans les versions précédentes, on ne pouvait fetcher qu'un seul niveau de relations).
Par exemple, à partir du tutoriel qxBlog, il est maintenant possible de récupérer les données suivantes avec 1 seule requête :
1- récupérer un blog et son author ;
2- pour l'author fetché, je souhaite récupérer tous les blogs qu'il a écrit ;
3- pour chaque blog qu'il a écrit, je souhaite récupérer tous les commentaires associés.
Il est également possible de créer une liste de relations à récupérer, comme ceci par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 blog_ptr blog_tmp = blog_ptr(new blog(10)); QSqlError daoError = qx::dao::fetch_by_id_with_relation("author_id->list_blog->list_comment", blog_tmp);
Pour récupérer toutes les relations pour un niveau donné, il faut utiliser le mot-clé "*".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 blog_ptr blog_tmp = blog_ptr(new blog(10)); QStringList relation; relation << "author_id->list_blog->list_comment"; relation << "author_id->list_blog->list_category"; relation << "list_comment"; relation << "list_category"; QSqlError daoError = qx::dao::fetch_by_id_with_relation(relation, blog_tmp);
Par exemple, pour récupérer toutes les données de toutes les relations sur 3 niveaux, il faut écrire :
Remarque : l'opérateur "->" correspond à une jointure de type "LEFT OUTER JOIN" (jointure par défaut dans QxOrm).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 blog_ptr blog_tmp = blog_ptr(new blog(10)); QSqlError daoError = qx::dao::fetch_by_id_with_relation("*->*->*", blog_tmp);
Pour exécuter une jointure de type "INNER JOIN" entre 2 relations, il faut utiliser l'opérateur ">>", par exemple :
Je vais écrire une documentation sur cette nouvelle fonctionnalité de QxOrm 1.2.4...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 blog_ptr blog_tmp = blog_ptr(new blog(10)); QSqlError daoError = qx::dao::fetch_by_id_with_relation("author_id>>list_blog>>list_comment", blog_tmp);
Merci d'avance pour tous les tests que vous pourrez effectuer sur cette version BETA...
EDIT1 : ajout de la fonction qx::dao::execute_query<T> pour appeler des requêtes personnalisées ou des procédures stockées.
EDIT2 : corrige un problème avec la cible d'installation unix (copie des fichiers inl).
EDIT3 : prise en charge du type boost::optional<T> pour gérer la valeur NULL au niveau BDD sans passer par le type QVariant.
EDIT 4 : ajout de la classe qx::QxDaoAsync pour faciliter l'appel de requêtes dans des threads différents (asynchrone) => permet entre autre de ne pas bloquer l'IHM pendant une requête.
Partager