QxOrm 1.4.1 BETA : Test Mode
Bonjour à tous,
Vous pouvez télécharger la version courante de QxOrm 1.4.1 ici (version BETA) : http://www.qxorm.com/version/QxOrm_1.4.1_BETA_96.zip
Cette version BETA devrait être très proche de la version finale 1.4.1 : pas de nouvelle fonctionnalité, juste des corrections de bogues ou régressions que nous pourrions trouver dans cette BETA.
Merci à tous ceux qui peuvent aider à tester et à valider cette version :)
Voici les nouveautés apportées par cette version QxOrm 1.4.1 :
!!! REMARQUE IMPORTANTE AU SUJET DE CETTE VERSION !!! : il est fortement recommandé de lire le fichier de configuration QxOrm.pri de cette nouvelle version (les options de compilation ont changé par rapport aux versions précédentes).
A présent, par défaut, la bibliothèque QxOrm est beaucoup plus légère : QxOrm dépend uniquement de QtCore et QtSql (la dépendance à boost serialization est maintenant optionnelle et non requise par défaut).
A présent, le moteur de sérialisation par défaut est basé sur la classe QDataStream de Qt (mais il est toujours possible d'activer boost serialization en définissant l'option de compilation _QX_ENABLE_BOOST_SERIALIZATION dans le fichier de configuration QxOrm.pri).
Avec les options par défaut :
- QxOrm 1.4.1 est beaucoup plus simple à installer car il n'est pas nécessaire de lier la dépendance externe boost serialization (uniquement les binaires Qt) ;
- Le binaire de QxOrm 1.4.1 est 3 fois plus léger comparé à la version précédente 1.3.2 ;
- Les binaires qui dépendent de QxOrm sont 25% plus petits ;
- Si dans vos projets actuels basés sur QxOrm, vous n'utilisez pas les fonctions de sérialisation, alors vous pouvez définir ou non l'option de compilation _QX_ENABLE_BOOST_SERIALIZATION sans changer une seule ligne de code.
Voici tous les autres changements de la version QxOrm 1.4.1 :
- Amélioration du moteur de relations : possibilité de sélectionner les colonnes à récupérer en utilisant la syntaxe suivante : my_relation { col_1, col_2, etc... } ;
- Optimisation du module QxTraits pour réduire les temps de compilation et la taille des binaires générés ;
- Nouvelle option de compilation _QX_ENABLE_BOOST_SERIALIZATION pour activer la dépendance à boost serialization (lire le fichier de configuration QxOrm.pri pour plus de détails) ;
- Nouvelle option de compilation _QX_ENABLE_QT_NETWORK pour activer le module QxService (transfert de la couche persistante sur le réseau) : lire le fichier de configuration QxOrm.pri pour plus de détails ;
- Support du moteur de sérialisation de Qt basé sur la classe QDataStream (utilisé par défaut si l'option de compilation _QX_ENABLE_BOOST_SERIALIZATION n'est pas définie) ;
- Amélioration de la classe qx_query (requêtes SQL) : nouvelle méthode (nommée customOperator()) qui donne la possibilité d'utiliser un opérateur personnalisé (par exemple l'opérateur <@ pour le type ltree de PostgreSQL) ;
- Corrige un problème au chargement d'un programme à cause des initialisations statiques des singletons (static initialization order fiasco) ;
- Nouvel espace de nom qx::dao::throwable avec les mêmes fonctions que dans le namespace qx::dao : les fonctions déclenchent une exception de type qx::dao::sql_error au lieu de retourner une instance de type QSqlError ;
- Ajout de la macro qAssertMsg() pour donner une description plus précise au déclenchement d'une assertion ;
- Ajout de tous les fichiers *.inl (implémentation des templates) dans le fichier projet QxOrm.pro : QtCreator peut à présent indexer ces fichiers *.inl dans son arborescence ;
- Les classes préfixées par QxStringCvt ont été renommées en QxConvert : si vous persistez des types personnalisés, il faut penser à renommer QxStringCvt_FromVariant, QxStringCvt_ToVariant en QxConvert_FromVariant, QxConvert_ToVariant.
A propos de cette nouvelle fonctionnalité : amélioration du moteur de relations : possibilité de sélectionner les colonnes à récupérer en utilisant la syntaxe suivante : my_relation { col_1, col_2, etc... }.
Il y a un exemple dans le projet de test qxBlog montrant comment sélectionner les colonnes associées aux relations :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| // Fetch relations defining columns to fetch with syntax { col_1, col_2, etc... }
list_blog lstBlogComplexRelation;
daoError = qx::dao::fetch_all_with_relation(QStringList() << "{ blog_text }" << "author_id { name, birthdate }" << "list_comment { comment_text } -> blog_id -> *", lstBlogComplexRelation);
qx::dump(lstBlogComplexRelation);
qAssert(lstBlogComplexRelation.size() > 0);
qAssert(lstBlogComplexRelation[0]->m_text != ""); // Fetched
qAssert(lstBlogComplexRelation[0]->m_dt_creation.isNull()); // Not fetched
qAssert(lstBlogComplexRelation[0]->m_author->m_sex == author::unknown); // Not fetched
qAssert(lstBlogComplexRelation[0]->m_author->m_name != ""); // Fetched
qAssert(lstBlogComplexRelation[0]->m_commentX.size() > 0);
qAssert(lstBlogComplexRelation[0]->m_commentX[0]->m_dt_create.isNull()); // Not fetched
qAssert(lstBlogComplexRelation[0]->m_commentX[0]->m_text != ""); // Fetched
qAssert(lstBlogComplexRelation[0]->m_commentX[0]->m_blog); |
Merci !