Accueil | T�l�chargement | Exemple rapide | Tutoriel (4) | Manuel (2) | Forum | Nos clients

QxOrm >> T�l�chargement

Version courante : | QxOrm 1.5.0 - documentation en ligne de la biblioth�que QxOrm - GitHub
| QxEntityEditor 1.2.8

QxOrm est une biblioth�que C++ disponible sous une double licence :

- licence GNU/GPLv3 : open-source et gratuite (id�ale pour d�velopper un projet open-source ou pour une �valuation de la biblioth�que QxOrm) ;
- licence propri�taire permettant de distribuer une application bas�e sur la biblioth�que QxOrm sans les restrictions de la licence GNU/GPLv3.

| T�l�charger QxOrm version 1.5.0 (source + test + documentation) Cette version est compatible avec Visual Studio (Windows), GCC (Linux et Mac OS X), MinGW (Windows) et Clang (Mac OS X) : support de la norme C++11 n�cessaire.

QxOrm library has been accepted into the Qt Ambassador Program

QxEntityEditor est un �diteur graphique pour la biblioth�que QxOrm : QxEntityEditor permet de g�rer graphiquement le mod�le d'entit�s.
QxEntityEditor est multi-plateforme (disponible pour Windows, Linux et Mac OS X) et g�n�re du code natif pour tous les environnements : bureau (Windows, Linux, Mac OS X), embarqu� et mobile (Android, iOS, Windows Phone, Raspberry Pi, etc.).

| QxEntityEditor 1.2.8 - Windows 32 bits |  |  | QxEntityEditor 1.2.8 - Windows 64 bits |
| QxEntityEditor 1.2.8 - Windows 32 bits (portable) |  |  | QxEntityEditor 1.2.8 - Windows 64 bits (portable) |
| QxEntityEditor 1.2.8 - Linux 32 bits |  |  | QxEntityEditor 1.2.8 - Linux 64 bits
| QxEntityEditor 1.2.8 - Mac OS X

Remarque : par d�faut, l'application QxEntityEditor est limit�e � 5 entit�s par projet. Pour obtenir une cl� de licence et ainsi cr�er un nombre illimit� d'entit�s par projet, vous pouvez nous contacter � l'adresse suivante : ic-east.com. Prix d'une cl� de licence QxEntityEditor : 500€ (par d�veloppeur, mise � jour gratuite pendant 12 mois).
Un manuel utilisateur (documentation) d�di� � l'application QxEntityEditor est disponible.

QxOrm est bas� sur la biblioth�que Qt. Vous devez donc t�l�charger et installer le framework Qt avant de pouvoir utiliser QxOrm.

Qt : biblioth�que compl�te : IHM (QtGui), r�seau (QtNetwork), XML (QtXml), base de donn�es (QtSql), etc...
La documentation est excellente et le code C++ �crit � partir de cette biblioth�que est � la fois performant et simple de compr�hension.
Depuis le rachat par Nokia puis Digia et sa nouvelle licence LGPL, Qt est sans contexte la biblioth�que phare du moment.
QxOrm est compatible avec les principaux objets d�finis par Qt : QObject, QString, QDate, QTime, QDateTime, QList, QHash, QSharedPointer, QScopedPointer, etc...
Il est conseill� d'installer et d'utiliser la derni�re version de Qt disponible � l'adresse suivante : http://www.qt.io/

Voici l'historique des modifications apport�es � la biblioth�que QxOrm ainsi que l'application QxEntityEditor :

- Historique des modifications de la biblioth�que QxOrm ;
- Historique des modifications de l'application QxEntityEditor.

Historique des modifications de la biblioth�que QxOrm :

## Changes in version 1.5.0:

- Fix qx::dao::fetch_by_id_with_relation() when a table alias is used (table alias is now used in the WHERE part instead of table name)
- Fix qx::IxDataMember::getType() method when used in a multi-thread environment
- New method qx::IxSqlRelation::linkRelationKeyTo() for MongoDB database to simulate lazy loading for relationships (GitHub #107)
- Fix qx::QxSqlDatabase and multi-thread issue when the OS assigns an old and destroyed thread identifier to a new one (GitHub #42) + add method qx::QxSqlDatabase::removeDatabaseByThread() to call at the end of a thread execution
- Fix qx::QxSimpleCrypt class with Qt version >= 5.10 and error "Attempted to overwrite a QRandomGenerator to system() or global()"
- Fix database not opened using async queries (GitHub #109)

## Changes in version 1.4.9:

- Fix compilation issue with Qt 6.2+ (due to Qt JIRA : https://bugreports.qt.io/browse/QTBUG-92910), more details in GitHub issue #54
- Support QSqlQuery::execBatch() method to improve performance inserting/updating/deleting a list of C++ instances in database (new optional parameter 'bUseExecBatch' available for functions : qx::dao::insert, qx::dao::update, qx::dao::delete_by_id)
- New method in qx::QxSqlQuery class named setFctOnBeforeSqlPrepare() to define a custom callback function to modify SQL query before preparing in database
- New callbacks functions available in qx::IxDataMember interface to customize SQL generated per data member (see an example in ./test/qxBlogCompositeKey/src/blog.cpp file)
- Fix an issue in qx::QxSqlRelationLinked::hierarchyResolveOutput() which could call getIdFromQuery() for nothing, which could generate some warnings in Qt SQL driver (for example : QPSQLResult::data: column XX out of range)
- Fix a compilation issue of QxRestApi and QxHttpTransaction modules with Qt QStringBuilder option enabled (GitHub issues #50, #83)
- Improve SQL DISTINCT to support relationships (unit test available in qxBlog sample project)
- New feature to fetch relationships only in LEFT OUTER/INNER JOIN and WHERE clauses (so no columns in SELECT part) : use {NULL} syntax to define no relation columns in SELECT part (unit test available in qxBlog sample project)
- Fix a crash which could occur using qx::QxSession and multi-threaded environment
- Add a new parameter caseSensitive (default value : false) to the method qx::QxSqlQuery::getSqlResultAt()
- Fix an issue with JSON REST API (QxRestApi module) and MongoDB database (more details in GitHub issue #70)
- Improve qx::QxClassX::registerAllClasses() : init all validator instances (can fix some issues in a multi-thread environment)
- New settings available in the qx::QxSqlDatabase singleton class (setSqlDelimiterForTableNameAlias() and setSqlDelimiterForColumnNameAlias()) to add delimiters to SQL aliases (more details in GitHub issue #57)
- Fix linking error which could occur with Qt6 and MSVC2019 (should fix GitHub issues #98, #91, #89, #90, #62, #65)
- Fix all checks with QT_VERSION (using macro QT_VERSION_CHECK), should fix checks from Qt 5.10 to Qt 5.15 (GitHub issue #81)

## Changes in version 1.4.8:

- Support Qt6 (tested with MSVC 2019 + CMake 3.19 on Windows) ==> QxOrm library is compatible with Qt4, Qt5 and Qt6
- Support PIMPL idiom for persistent classes (useful to reduce compilation times, to provide a stable ABI, ascendant compatibility for shared libraries, to reduce binaries size)
- Documentation about PIMPL idiom for persistent classes : https://www.qxorm.com/qxorm_en/manual.html#manual_455
- New sample project named qxBlogPImpl in ./test/ directory of QxOrm package to show how to implement persistent classes using the PIMPL idiom
- Possibility to ignore soft delete behavior during a session execution (useful to fetch logical deleted instances for example) : qx::QxSession::ignoreSoftDelete()
- Fix SQL DISTINCT keyword in qx::QxSqlQuery class (when DISTINCT is used, then the primary key is not fetched)
- Fix an issue which could happen after enabling _QX_ENABLE_QT_NETWORK compilation option (due to QT_NO_SSL/QT_NO_OPENSSL used in QxThread.cpp file)
- Fix an issue in qx::QxSqlDatabase and multi-thread context when a thread identifier is reused (GitHub issue #42)
- Add new behavior to qx::QxSession class with setAutoRollbackWhenDestroyed() option : if true, then database rollback is called when session instance destructor (or close() method) is invoked (instead of commit by default, GitHub issue #43)

## Changes in version 1.4.7:

- Fix a MongoDB issue with qx::dao::fetch_by_id_with_relation() (wrong id fetched)
- Fix an issue with qx::dao::fetch_all when a custom list of columns with the primary key is used
- Fix identifier JSON serialization for MongoDB with properties registered as Q_PROPERTY (Qt property meta system)
- Fix a crash (seg fault) using qx::IxPersistable with multiple inheritance (for example QObject + qx::IxPersistable) due to some static_cast to void * in QxFactory module (fix also for QxService module and multiple inheritance)
- Remove automatic relationship lazy fetch when not requested in query
- Fix an issue with QJson and QDataStream serialization when class doesn't contain any identifier (so not a database class) and is a wrapper of another registered class (can have same address pointer as parent)
- Improve qx::QxSqlQuery::freeText() method to add custom text to build SQL query : support placeholders (add second parameter const QVariantList & values)
- Improve performance in a multi-threads environment (mutex in qx::IxSqlQueryBuilder)
- New setting to display more details (execution times) in qx::dao functions logs (to enable this new feature : qx::QxSqlDatabase::getSingleton()->setDisplayTimerDetails(true))
- Improve MongoDB integration to fetch a list of items : build C++ instances as soon as possible without putting data in a buffer (better performance + less memory usage)
- Improve MongoDB integration : support qx::dao::delete_by_query() function with MongoDB aggregation framework
- Improve qx::QxSqlQuery class (or its qx_query alias) : new addJoinQuery() method to insert SQL sub-queries inside LEFT OUT JOIN / INNER JOIN (more details in documentation here : https://www.qxorm.com/qxorm_en/manual.html#manual_3855)
- Improve qx::QxSqlQuery class : new constructors with placeholders support + new methods to embed SQL sub-queries (in_Select, notIn_Select, isEqualTo_Select, isNotEqualTo_Select)
- Improve qx::QxCollection class : qx::QxCollection is now a thread-safe container (fix for example QxModelView module when model is fetched in a different thread than the view)

## Changes in version 1.4.6:

- New QxHttpServer module : C++/Qt standalone multi-threaded HTTP 1.1 web server (support SSL/TLS, persistent connections, cookies, sessions, chunked responses, URL dispatcher/routing, no other dependency except QtNetwork) : https://www.qxorm.com/qxorm_en/manual.html#manual_96
- New QxRestApi module : provide a REST API to send requests in JSON format from external application (web services), from web-site (written in Angular for example), from QML or from scripting langage (like Python) : https://www.qxorm.com/qxorm_en/manual.html#manual_97
- With QxHttpServer and QxRestApi modules, QxOrm library can now be used to create web applications, especially single-page applications (SPA) with famous Javascript frameworks like AngularJS, React, Meteor.js, etc...
- New project example named qxBlogRestApi : QML application with a list of REST requests to show how to send JSON queries from Javascript to QxRestApi module + HTTP web server application to show how to create web applications using QxHttpServer module
- QxRestApi module supports : all CRUD operations, complex queries, several levels of relationships, custom JSON output format, call dynamically native C++ functions registered in QxOrm context, instance validation, call custom database queries
- Improve JSON serialization engine : possibility to define a custom filter to not export all properties (https://www.qxorm.com/qxorm_en/manual.html#manual_606)
- Possibility to define a custom SQL table alias for complex queries with relationships using syntax <my_table_alias> (https://www.qxorm.com/qxorm_en/manual.html#manual_3850)
- Improve SQL generator for Oracle database : manage last insert id using RETURNING INTO syntax (thx to Romain Macureau and Abdennour Boutrig)
- Fix an issue with stored procedure and output parameters
- New function available : qx::dao::count_with_relation<T>()
- Fix JSON serialization in multi-thread environment
- Change JSON QDateTime and QTime serialization format : use Qt::ISODateWithMs instead of Qt::ISODate (Qt 5.8 or +)
- Improve QxService module : support SSL/TLS secure connections + keep-alive connections
- Remove *.suo files (MSVC++ temporary project files) from QxOrm package

## Changes in version 1.4.5:

- Support MongoDB database : QxOrm library becomes a C++/Qt Object Document Mapper ODM library !
- For more details about MongoDB integration, see QxOrm manual (https://www.qxorm.com/qxorm_en/manual.html#manual_95) and new sample project available in ./test/qxBlogMongoDB/ directory
- QxOrm library is now available on GitHub (official repository) : https://github.com/QxOrm/QxOrm
- Fix an issue in qx::IxSqlQueryBuilder class when QxOrm library is used in a multi-thread environment
- Support latest version of boost (1.66)
- Update boost portable binary serialization classes to version 5.1 (provided by https://archive.codeplex.com/?p=epa)
- Fix an issue building SQL query for Oracle database (doesn't support AS keyword for table alias)
- Improve qx::QxClassX::registerAllClasses() function : possibility to initialize all relations (useful to work with introspection engine)
- Improve qx::IxPersistable interface : provide new methods toJson() / fromJson()
- Improve documentation/website : change http://www.qxorm.com by https://www.qxorm.com everywhere
- Fix fetching relations with soft delete putting SQL condition in the JOIN part instead of WHERE part
- Fix SQL generator for Oracle database : use new limit/pagination syntax (version Oracle > 12.1)
- Improve SQL generator interface : add 'onBeforeSqlPrepare()' method to modify/log SQL queries in custom classes
- Add an option in qx::QxSqlDatabase class to format SQL query (pretty-printing) before logging it (can be customized creating a qx::dao::detail::IxSqlGenerator sub-class)
- Fix an issue with boost/std::optional (to manage NULL database values) and some databases : if optional is empty, then create a NULL QVariant based on QVariant::Type
- Add an option in qx::QxSqlDatabase class to insert square brackets (or any other delimiters) in SQL queries for table name and/or column name (to support specific database keywords)
- Improve introspection engine : add getType() method in qx::IxDataMember interface to get C++ type of a property dynamically
- Improve qx::QxSqlDatabase singleton settings class to make easier working with several databases : now there are 3 levels of settings : global >> per thread >> per database (see 'bJustForCurrentThread' and 'pJustForThisDatabase' optional parameters in all setXXXX() methods)
- Fix QxOrm.pri for MinGW compiler on Windows : an issue could occurred to export some symbols from shared library (some Qt signals for example)
- Add an option in qx::QxSqlDatabase singleton class to display only slow SQL queries (see setTraceSqlOnlySlowQueriesDatabase() and setTraceSqlOnlySlowQueriesTotal() methods)

## Changes in version 1.4.4:

QxOrm library doesn't depend on boost framework anymore (the boost dependency has been fully removed, replaced by some C++11 features).
So QxOrm library is now a pure Qt library which depends only on QtCore and QtSql by default.
For backward compatibility, QxOrm library still supports some boost classes (boost smart-pointers, unordered containers, boost::optional, etc...) : you have to define _QX_ENABLE_BOOST compilation option to enable these features.
Main advantages are :
- QxOrm becomes a much lighter library
- easier to install (because you don't have to deal with boost anymore)
- reduce compilation times
- reduce output binary size
Thx also to Jimmy Taker for several improvments and new features in QxModelView module !
- QxOrm library now requires a C++11 compiler (please note that QxOrm doesn't require a full compliant C++11 compiler : for example, QxOrm can be built and used with MSVC 2012, GCC 4.5 or Clang 3.2)
- Implement PIMPL idiom for some QxOrm classes to reduce compilation times and output binary size
- New class named qx::any to replace boost::any (basic implementation of boost::any written by Kevlin Henney)
- qx_shared_ptr alias doesn't exist anymore : it is replaced everywhere by std::shared_ptr
- QxModelView module : all models based on qx::IxModel class can now be sorted (on all columns), please note that you can also use QSortFilterProxyModel Qt class to sort your model
- QxModelView module - qx::QxModel<T> : fix setData() with e_auto_update_on_field_change option when an error occurred saving data in database, now previous value is restored if an error occurred
- QxModelView module - qx::IxModel : fix setHeaderData() using it with default role (Qt::EditRole) changes the header in a header view (role Qt::DisplayRole)
- QxModelView module - qx::IxModel : if a description is registered in QxOrm context, then it is displayed in header for each property
- QxModelView module : new feature available to add automatically an empty row at the end of the table to insert quickly new items (setShowEmptyLine() method)
- QxModelView module : possibility to define an intermediate base class between qx::IxModel and qx::QxModel<T> to provide your own model features, for example imagine you develop a drag&drop feature in a class named IxModelDragDrop, you can now create a QxOrm model like this (see the second template parameter) : qx::IxModel * pModel = new qx::QxModel<MyPersistantClass, IxModelDragDrop>();
- QxOrm.pro : fix DESTDIR parameter on Windows
- QxOrm.pri and QxOrm.cmake : add a section to enable QT_USE_QSTRINGBUILDER to optimize QString operations
- QxOrm library is now tested with MSVC 2015 compiler (support all MSVC versions from 2012)
- Fix a bug in QxSqlError.h file with a qPrintable() call on a temporary object
- Provide more details in logs after executing a SQL query : time to execute query in database + time to fetch C++ instances
- Support std::optional<T> (if your compiler supports C++17 features) to manage NULL database value : new header available named <QxExtras/QxStdOptional.h> to include just after <QxOrm.h> header file (ideally in a precompiled header)

## Changes in version 1.4.3:

- Support CMake : new CMakeLists.txt file added to build QxOrm library with CMake
- Improve SQL error messages when qx::dao functions return a database error
- New parameter in singleton class qx::QxSqlDatabase to log SQL bound values (setTraceSqlBoundValues) : by default, bound values are logged when an error occurred
- New syntax to select columns to not fetch : -{ col_1, col_2, etc... }
- New function qx::dao::call_query_without_prepare() to execute specific SQL queries without prepared statement
- Improve QxModelView module : all QxOrm models (based on qx::IxModel interface) can be serialized to JSON format (including all relationships levels) : this is now another way to work with relationships and QML (thanks to JSON.parse() and JSON.stringify() javascript functions) without using nested models concept (so without using QxEntityEditor model/view generated classes)
- Improve qxBlogModelView sample project and QxOrm manual to show how to access to relationships data in QML (nested models or JSON)
- Fix a memory leak in qx::QxSqlRelation class
- Reduce output binary size (~20%) and compilation times (~20%) to build persistent classes based on QxOrm library
- Support unity build concept to reduce compilation times to build QxOrm library and C++ persistent classes generated by QxEntityEditor application : for more details, see _QX_UNITY_BUILD compilation option in QxOrm.pri or QxOrm.cmake configuration file
- Improve QxConvert module : possibility to store in database complex QVariant properties which contain QVariantMap, QVariantHash or QVariantList types (JSON format)
- Fix an issue with some databases when a foreign key is also a part of the primary key
- Fix an issue with QSharedPointer and boost::serialization when a same raw pointer is shared by several QSharedPointer during deserialization process

## Changes in version 1.4.2:

- Support JSON serialization : each C++ class registered in QxOrm context can be serialized/deserialized in JSON format (JSON feature requires Qt5)
- For more details about JSON serialization, read QxOrm manual here : https://www.qxorm.com/qxorm_en/manual.html#manual_606
- With JSON serialization and QxService module : it is now possible to create REST Web Services to send data to a javascript engine (web pages for example)
- Fix some compilation errors with recent (and less permissive) compilers and latest versions of boost and Qt
- Fix relationship initialization assertion with complex, deep and circular relationships in large database schema
- Improve QDataStream serialization : should be faster now and fix an issue with circular instances dependencies
- Fix a bug fetching 1-n and n-n relationships when root is a container of stack objects (it worked only with pointers or smart-pointers, for example : QList<blog> vs QList<std::shared_ptr<blog>>)
- Improve qx::dump() function : possibility to display a C++ instance state in XML or JSON format

## Changes in version 1.4.1:

!!! IMPORTANT NOTE ABOUT THIS VERSION !!! : it is strongly recommended to read the QxOrm.pri configuration file of this new version (compilation options have changed compared to previous versions).
Now, by default, QxOrm library is a much lighter library : QxOrm depends only on QtCore and QtSql (boost serialization is now optional and not required by default).
By default, serialization engine is now based on Qt QDataStream class (but you can still enable boost serialization defining _QX_ENABLE_BOOST_SERIALIZATION compilation option in QxOrm.pri configuration file).
So now, with default options :
- QxOrm 1.4.1 is much easier to install because you don't have to deal with boost serialization extra dependency ;
- QxOrm 1.4.1 shared library is 3X smaller than 1.3.2 version ;
- Generated binaries which depends on QxOrm library are 25% smaller ;
- If you are not using serialization functions in current projects based on QxOrm library, then you can define or not _QX_ENABLE_BOOST_SERIALIZATION compilation option without changing any line of your source code.
Here are all other changes of version 1.4.1:
- Improve relationships engine : possibility to select columns to fetch using syntax : my_relation { col_1, col_2, etc... }
- Improve QxTraits module to reduce compilation times and build smaller binaries
- Improve QxOrm website adding possibility to search and replacing the old FAQ by a more organized manual (user guide)
- New compilation option _QX_ENABLE_BOOST_SERIALIZATION to enable boost serialization dependency (read QxOrm.pri configuration file for more details)
- New compilation option _QX_ENABLE_QT_NETWORK to enable QxService module (transfer persistent layer over network) : read QxOrm.pri configuration file for more details
- New compilation option _QX_NO_RTTI to build QxOrm library without C++ RTTI type information
- Support QDataStream Qt serialization engine (used by default when _QX_ENABLE_BOOST_SERIALIZATION compilation option is not defined)
- Improve qx_query class (SQL queries) : new method (named customOperator()) which gives the possibility to define a custom operator (for example <@ for PostgreSQL ltree type)
- Fix a program startup issue due to 'static initialization order fiasco' creating singletons (it was an issue with some compilers during the shared library link process)
- New namespace qx::dao::throwable : same functions as qx::dao namespace, but they throw a qx::dao::sql_error exception when a SQL error occurred (instead of returning a QSqlError instance)
- Add a qAssertMsg() macro to put a more explicit error message when throwing an assertion
- Include all *.inl files (template implementation) in QxOrm.pro project file : QtCreator can now index these *.inl files in its project treeview
- Rename QxStringCvt to QxConvert : so if you persist custom types to database, you have to rename from QxStringCvt_FromVariant, QxStringCvt_ToVariant to QxConvert_FromVariant, QxConvert_ToVariant

## Changes in version 1.3.2:

- Support C++11 types (need to set compilation options in QxOrm.pri config file to enable these features)
- With _QX_CPP_11_SMART_PTR compilation option : std::unique_ptr, std::shared_ptr, std::weak_ptr
- With _QX_CPP_11_CONTAINER compilation option : std::unordered_map, std::unordered_set, std::unordered_multimap, std::unordered_multiset
- With _QX_CPP_11_TUPLE compilation option : std::tuple

## Changes in version 1.3.1:

- New class qx::QxModelService<T, S> in QxModelView module to connect a Qt model to services to execute client-server requests (can be used with QML and QtWidgets views)
- Add some useful methods to qx::IxModel class and fix several issues with the QxModelView module
- Support last version of MinGW with large precompiled header bug : new compilation option _QX_NO_PRECOMPILED_HEADER (to enable in QxOrm.pri file)
- Fix issue when loading several shared libraries on Windows with services registered in QxService module
- Fix the qx::QxSqlQuery serialization process used by QxService module to send requests over network
- Fix an issue with qx::QxCollection<Key, Value> class when inserting an item at last position

## Changes in version 1.2.9:

- Improve nested models in QxModelView module to be able to use several relationships levels in QML

## Changes in version 1.2.8:

- New function qx::model_view::create_nested_model (QxModelView module) used by QxEntityEditor to manage complex data structure to work with relationships in QML views and Qt model/view architecture
- New section in the QxOrm.pri file with some tips to reduce output binaries size
- Fix the call of triggers to have the inserted ID inside the trigger function with PostgreSQL

## Changes in version 1.2.7:

- New module QxModelView : now, all classes registered into QxOrm context can be used with Qt model/view architecture (Qt widgets and/or QML views)
- qx::IxModel interface provides an easy way to work on QML with QxOrm library and interact with databases
- For more details about the new module QxModelView, goto the FAQ : 'How to use QxModelView module to interact with Qt model/view architecture (Qt widgets and/or QML views) ?'
- New function qx::dao::save_with_relation_recursive(), useful to save a full tree structure for example
- Remove the dependency on the STL compatibility functions in Qt (QT_NO_STL), which may not be available (thanks to KDE Plasma Media Center team for the patch)
- Support database table defined into a schema (using qx::IxDataMember::setName() function)

## Changes in version 1.2.6:

- First version full compatible with QxEntityEditor application : the graphic editor for QxOrm library !
- For more details about QxEntityEditor, go to QxOrm website : https://www.qxorm.com/
- Thanks to the recent release of Qt 5.2, QxOrm library can now be used on Android and iOS
- Improve relationships and triggers engine
- Triggers onBeforeFetch() and onAfterFetch() called when fetching relationships
- Fix release mode detection during compilation : should improve performance on some environments
- Add serialization for QSqlError, qx::QxSqlQuery, qx::QxInvalidValue and qx::QxInvalidValueX classes

## Changes in version 1.2.5:

- New license : go to download page of QxOrm website for more details
- Support Qt5
- New compiler supported : Clang (tested on Mac OS X)
- Now each QxOrm version will be tested in 32-bit and 64-bit mode
- Improve QxOrm introspection engine : possibility to register static class methods
- Improve QxService module : now it's easy to add an authentication process on server side
- New class qx::exception to get error code + error description with services methods throwing an exception
- New settings available in QxOrm.pri config file (whithout changing QxConfig.h file)
- Possibility to implement specifics database SQL functions overriding qx_query class
- Fix an issue when fetching multiple levels of relationship and NULL pointers
- Fix a bug with MS SQL Server database and update queries using auto-increment id

## Changes in version 1.2.4:

- New relationship engine to fetch easily many levels of relationships per query
- For more details about this new engine, goto the FAQ : 'How to use relationship engine to fetch datas from many tables ?'
- Add 2 functions : qx::dao::execute_query and qx::dao::call_query to call a stored procedure or a custom SQL query
- For more details about this new feature, goto the FAQ : 'How to execute a stored procedure or a custom SQL query ?'
- Add support for boost::optional type to manage NULL database value without using QVariant type
- New class : qx::QxDaoAsync to make easier to execute queries in asynchronous way (multi-thread)
- For more details about this new class, goto the FAQ : 'How to use qx::QxDaoAsync class to execute queries in asynchronous way (multi-thread) ?'

## Changes in version 1.2.3:

- New interface 'qx::IxPersistable' (abstract class) to simplify polymorphism using QxOrm library
- For more details about this new interface, goto the FAQ : 'How to use qx::IxPersistable interface ?'
- New methods into 'qx::IxCollection' interface to iterate over each items without knowing its type
- New option into 'QxOrm.pri' file to build QxOrm library statically (see '_QX_STATIC_BUILD' option)
- New triggers : 'qx::dao::on_before_fetch' and 'qx::dao::on_after_fetch' (for more details, goto the FAQ : 'How to define a Trigger with QxOrm ?')
- Add 'std::type_info' class information to introspection engine
- Some minor bugs fixed ('qx::dao::sql_error' exception message, SQL query column alias, mutex, etc.)

## Changes in version 1.2.2:

- New module to provide a validation engine : QxValidator module
- For more details about QxValidator module, goto the FAQ of QxOrm library : 'How to use QxValidator module to validate automatically an instance ?'
- Fix last insert ID with PostgreSQL using 'RETURNING' keyword : fetch inserted ID instead of OID
- Improve SQL generator providing the good SQL type for all databases
- Add support for special database keywords using '[', ']' and '"' characters

## Changes in version 1.2.1:

- Improve 'qx::QxSqlQuery' class : new engine to build queries without writing SQL, for more details, see the FAQ 'How to build a query without writing SQL with the class qx::QxSqlQuery ?'
- Improve 'qx::QxSession' class : provide persistent methods (CRUD) without using 'qx::dao::xxx' functions, for more details, see the FAQ 'How to use a session (qx::QxSession class) to manage automatically database transactions (using C++ RAII) ?'
- Implement 'repository' pattern to provide a common interface for persistent methods (CRUD) with 3 new classes : 'qx::IxRepository', 'qx::QxRepository<T>' and 'qx::QxRepositoryX'
- Possibility to serialize a QVariant 'UserType' with serialization engine of QxOrm library
- Improve thread-safe 'qx::cache' : add insertion date-time into the cache to verify that an element must be updated or not, for more details, see the FAQ 'How to use the cache (functions into namespace qx::cache) of QxOrm library ?'
- FAQ updated on QxOrm website with now 28 questions and answers

## Changes in version 1.1.9:

- Possibility to register automatically Qt meta-properties (using Q_PROPERTY macro) to QxOrm context without writing mapping function per class (void qx::register_class<T>())
- Strong integration with Qt introspection/moc engine : for more details about this new feature, goto the FAQ 'How to register automatically Qt meta-properties to QxOrm context ?'
- Improve introspection/reflection engine : see the FAQ (How to use introspection engine (or reflection engine) of QxOrm library ?) for more details
- Possibility to add meta-data (using a property bag) to introspection engine : see 'IxClass', 'IxDataMember' and 'IxFunction' classes for more details
- Add function 'qx::QxClassX::dumpSqlSchema()' to explain how to create your own SQL schema based on C++ classes
- New class 'qx::QxSimpleCrypt' to provide encryption/decryption (thanks very much to Andre Somers) : so it's now possible to store encrypted data into database without using an external library
- QxService module : new feature to encrypt/decrypt data before transfering it over network

## Changes in version 1.1.8:

- QxOrm library can now be used on Mac (thanks very much to Dominique Billet) : see 'osx_build_all_debug.sh' and 'osx_build_all_release.sh' scripts to build QxOrm library and all samples in './test/' directory
- Add 'qx::QxSession' class : define a session to manage automatically database transactions (using C++ RAII), see the FAQ for more details
- Add 'qx::QxDateNeutral', 'qx::QxTimeNeutral' and 'qx::QxDateTimeNeutral' classes : helper classes to store date-time value into database under neutral format => cross database compatibility

## Changes in version 1.1.7:

- Add soft delete behavior : see the FAQ (How to define a soft delete behavior ?) for more details about this new feature
- Add functions into namespace 'qx::dao' to update an element with a SQL condition : update_by_query, update_optimized_by_query, etc.
- Fix a bug when QVariant type is used for a property of a persistent class : so, it's now possible to insert NULL value into database

## Changes in version 1.1.6:

- QxOrm library online documentation available : 'https://www.qxorm.com/doxygen/index.html'
- Possibility to disable QtGui dependency using compilation option in 'QxConfig.h' file : _QX_ENABLE_QT_GUI_DEPENDENCY
- Possibility to disable QtNetwork dependency (so QxService module too) using compilation option in 'QxConfig.h' file : _QX_ENABLE_QT_NETWORK_DEPENDENCY
- Provide a new macro to register abstract class into QxOrm context : QX_REGISTER_ABSTRACT_CLASS()

## Changes in version 1.1.5:

- New feature available : 'QxService' module to create C++ application server
- 'QxService' provides an easy and powerful way to create services and to transfer data over network
- New tutorial available to explain how 'QxService' module works
- New sample available at './test/qxClientServer' directory
- QxOrm can be built with 'CONFIG += no_keywords' flag in '*.pro' files
- Bug fix with 'qx::dao::create_table<>' function and relation 'many-to-many'
- QxOrm should now build fine with GCC <= 4.2

## Changes in version 1.1.4:

- New parameter in functions 'qx::dao::fetch_by_id', 'qx::dao::fetch_all', 'qx::dao::fetch_by_query' and 'qx::dao::update' to define a list of properties to fetch/update (by default, all properties are fetched/updated)
- Support multi-columns primary key (composite key) : see sample './test/qxBlogCompositeKey/'
- Improve strategy of inheritance : QxOrm supports 'Concrete Table Inheritance' strategy ('Concrete Table Inheritance' becomes default strategy)
- New smart-pointer 'qx::dao::ptr<T>' based on Qt 'QSharedPointer<T>' to provide 2 new features : 'is dirty' and 'update optimized'
- 'qx::dao::ptr<T>' can be used with a simple object and with many containers (stl, boost, Qt and 'qx::QxCollection' containers)
- 'qx::dao::ptr<T>' keeps original values from database and provides a 'isDirty()' method to retrieve all properties changed
- 'qx::dao::update_optimized' must be used with 'qx::dao::ptr<T>' to save into database only properties changed

## Changes in version 1.1.3:

- This version works fine with MinGW on Windows

## Changes in version 1.1.2:

- License LGPL
- Fix compilation problems on Linux and boost > 1.38
- Fix sql query with MySql database
- Disable assert when qx::dao functions return an error

## Changes in version 1.1.1:

- This version supports Visual Studio 2010

## Changes in version 1.1.0:

- First release

Historique des modifications de l'application QxEntityEditor :

## Changes in version QxEntityEditor 1.2.8:

- New export plugin 'QxEESourceControlExport' : export a *.qxee QxEntityEditor project file to a list of JSON files which can be easily check-in in a source control repository (Git, Perforce, CVS, etc...)
- New import plugin 'QxEESourceControlImport' : import a list of JSON files (generated using 'QxEESourceControlExport' export plugin) inside a *.qxee QxEntityEditor project file
- These 2 new plugins allow a team development to work simultaneously on a same *.qxee QxEntityEditor project file
- A typical workflow could be (with 2 developers named dev A and dev B) :
* dev A and dev B work on a same *.qxee QxEntityEditor project file
* dev A create/modify/change some entities in QxEntityEditor application
* dev B create/modify/change other entities in QxEntityEditor application
* dev A and dev B export the *.qxee project file using the new 'QxEESourceControlExport' export plugin
* Once exported, dev A and dev B check-in the JSON files inside the source control manager (Git, Perforce, CVS, etc...) on their own branch
* dev A and dev B integrate from their own branch to the DEV (or MAIN or MASTER) branch (if there are some conflicts to resolve, it should be easy because JSON files are easy to read and understand)
* dev A and dev B can now get latest JSON files from the DEV (or MAIN or MASTER) branch : these JSON files contain both modifications from dev A and dev B
* dev A and dev B can import these JSON files inside QxEntityEditor application using the new 'QxEESourceControlImport' import plugin
- These 2 new plugins can be executed using command line (like all other QxEntityEditor plugins), here are 2 examples :
* Export : QxEntityEditor --no_gui --project="C:\Temp\qxBlog.qxee" --plugin=QxEESourceControlExport --QxEESourceControlExport_path="C:\Temp\source_control\"
* Import : QxEntityEditor --no_gui --project="C:\Temp\qxBlog.qxee" --plugin=QxEESourceControlImport --QxEESourceControlImport_path="C:\Temp\source_control\qxBlog.qxee.export.json"

## Changes in version QxEntityEditor 1.2.7:

- Fix an issue with MySQL database schema import process when MySQL server is configured to answer with column names in UPPERCASE (may fix other imports depending on specific database configuration)

## Changes in version QxEntityEditor 1.2.6:

- Support PIMPL (private implementation or d-pointer) idiom in the C++ export plugin
- Documentation about PIMPL idiom for persistent classes : https://www.qxorm.com/qxorm_en/manual_qxee.html#cpp_export_settings_parameters
- Fix import database schema for PostgreSQL version 12 and +
- Fix some assertions on macOS and linux versions due to libavoid library compiled without NDEBUG compilation option (should improve performance too)
- Add CMake 'target_precompile_headers' command for generated CMakeLists.txt files to support precompiled headers building with CMake (reduce compilation times)

## Changes in version QxEntityEditor 1.2.5:

- Fix an issue with fonts on macOS Catalina 10.15
- Add command line parameter --font : define application font with syntax <family>||<pointSize>||<weight>||<italic> (only <family> is required), for example : Courier New||14
- Add command line parameter --style_sheet : define application style sheet (more details here : https://doc.qt.io/qt-5/stylesheet-reference.html), for example : QWidget { background-color: black }
- Fix meta-data (property bag) C++ export : keep same order between several C++ exports (this is now easier to check differences between 2 C++ exports using WinMerge or any other comparison/diff tool)

## Changes in version QxEntityEditor 1.2.4:

- New feature in Javascript engine to customize exports : include QxRestApi module to query *.qxee project file
- Fix a property/relation sorting issue in C++ export after importing a database schema (which could be annoying to make some C++ files diffs between 2 exports)
- Fix a crash which could occurred sometimes importing a new table on an existing schema

## Changes in version QxEntityEditor 1.2.3:

- Fix a crash which appears sometimes with complex database schema to draw relationships (orthogonal way)
- Improve QxEntityEditor command line parameters : possibility to import/export without using GUI (useful to manage a Jenkins server for example)
- For more details about command line parameters, go to QxEntityEditor documentation : https://www.qxorm.com/qxorm_en/manual_qxee.html#qxee_command_line

## Changes in version QxEntityEditor 1.2.2:

- Fix an issue after importing a project (from database or JSON file) which forced user to refresh or reload current project
- Improve performance (fetching less data from database) when loading relationships from generated persistent classes (bLoadFromDatabase parameter)
- Change model/view export plugin to take into account some improvments available in the new version of QxOrm library
- Support changes of new QxOrm version : remove boost dependency by default and enable C++11 features
- Improve Javascript engine to customize exports : add 3 functions available in js script to get all QxEntityEditor settings (at global level, project level and plugin level)
- Check entities schema before exporting to C++ project : if a design error is detected, then display a message to user
- Fix SQL type field in property settings : now you can put parenthesis (for example VARCHAR(255) is now allowed)
- DDL export for MySQL (and MariaDB) : add ` character to escape column name and table name
- Add full path to project in recent projects list and main window title bar
- Now it is easier to select a relationship from entities diagram with a simple click on it

## Changes in version QxEntityEditor 1.2.1:

- Support CMake : each C++ project generated by QxEntityEditor (persistent classes, services, model/view) provide a CMakeLists.txt file to build with CMake
- New online QxEntityEditor manual (user guide) available at : https://www.qxorm.com/qxorm_en/manual_qxee.html
- Improve Javascript engine to customize export generated files : add a parameter named 'output_location' to know where generated files are located + add functions to get a list of all entities/enums of a project (see ./samples/custom_script.js file for more details)
- Improve database import process (SQLite, MySQL/MariaDB, PostgreSQL, Oracle and MSSQLServer) : fix an issue importing composite foreign keys + foreign keys embedded in primary key ==> so it is now possible to import more complex database schema
- Improve DDL database schema export process : fix an issue with 1-1 relationship + manage composite keys
- New menu "Naming convention" to provide a fast way to rename all entities/properties/enums (without breaking mapping to database) : support snake_case, camelCase and PascalCase (or upper camel case), this new menu can be useful after an import from database process for example
- Each screen of QxEntityEditor provides now a fast access to the online manual (user guide) in its associated topic (new button "Documentation" + shortcut pressing F1 key everywhere)
- New buttons undo/redo in the main QxEntityEditor toolbar to undo or redo actions done on entities, enumerations, comments, layout (undo/redo feature can be disabled to improve performance on large projects)
- Support _QX_UNITY_BUILD compilation option to reduce compilation times of generated C++ projects (recommended with CMake which doesn't support natively precompiled headers)
- Fix an issue importing a relationship where target entity doesn't have a primary key
- Fix an issue with C++ services export plugin and JSON serialization : "Unable to create nude pointer for input parameter"
- Fix an issue with abstract entities and C++ model/view export plugin and C++ services export plugin
- Possibility to put hexadecimal values to define an enumeration
- New Javascript sample file in directory ./samples/ named q_property.js to show how to add automatically Q_PROPERTY definition for each property generated by QxEntityEditor

## Changes in version QxEntityEditor 1.1.9:

- New import plugin to connect to MySQL or MariaDB database without having to deal with ODBC settings
- New import plugin to connect to PostgreSQL database without having to deal with ODBC settings
- New import plugin to load a QxEntityEditor project from a JSON file
- Fix SQLite import process to manage composite keys
- Improve Javascript engine to customize export process : new types available by script to manage files and directories + possibility to get/set environment variables (read custom_script.js file in ./samples/ directory for script examples)
- Improve Javascript engine to customize export process : new events/actions available by script : PLUGIN_EXPORT_START, PLUGIN_EXPORT_END, AFTER_CLOSING_FILE
- New message box displayed if directory doesn't exist when starting an export process (to create it automatically)
- Fix an issue with the "Tag project state" function (project historic) : each tag double the size of a *.qxee project file (now each tag is optimized)
- Fix C++ services export process when C++11 features are enabled in QxOrm.pri configuration file
- Possibility to export a *.qxee project file to a JSON text file (can be useful to store a text representation in a source control, like Perforce, VSS, CVS, Git, etc...)
- Possibility to use an environment variable to define QxOrm library location (using the same syntax as qmake, for example $$(QXORM_DIR))

## Changes in version QxEntityEditor 1.1.8:

- Improve import plugins : reduce import process time : now, you can import hundred of entities in few seconds into a QxEntityEditor project
- Relationship n-1 : possibility to define a database column name different than the relationship name
- New file qxBlogExec.zip in the ./samples/ directory of QxEntityEditor package : this is a C++/Qt example project which depends on the qxBlog.qxee generated files
- Improve import by ODBC plugin screen : new schema/namespace level in the list of tables/views treeview
- Fix a performance issue to load large diagram with new style to draw relationships : you can now load quickly a project with hundred of entities
- Add new C++11 types to manage relationships, decoration, collection (std::shared_ptr, std::unordered_map and std::unordered_set) : C++11 features must be enabled in QxOrm.pri config file to use these classes
- Import process more permissive : possibility to import tables without primary key and tables without column

## Changes in version QxEntityEditor 1.1.7:

- New Navigator window (under project treeview) : useful to navigate over large diagram
- New way to draw relationships (orthogonal lines between 2 entities) + display the relationship type on each side (there is an option to use the old drawing style from previous version)
- Possibility to define a background color by namespace : useful to group all entities in the diagram associated to a same namespace
- New feature to customize entities/enumerations/notes colors at several levels
- Define items colors at project level (menu Tools >> Project settings >> Colors tab)
- Define items colors at namespace level (right-click on the diagram >> Define colors by namespace)
- Define colors at item level : right-click on an item (entity, enumeration or comment) >> Define item colors
- New action to organize automatically the diagram layout, useful after an import process for example (menu View >> Organize diagram layout)
- Improve the DDL SQL export plugin : new option to export relationships as foreign keys constraints in database
- Support the new compilation option _QX_NO_PRECOMPILED_HEADER of QxOrm library (workaround for a known bug of recent versions of MinGW on Windows and large precompiled header)
- Import database by ODBC plugin : fix the import from MS SQL Server database when tables are not located in the default schema (dbo)
- QxEntityEditor Mac OS X version : fix an issue to load the QxEEPrinter plugin
- Export plugin to C++ model/view project : new option to generate models based on the new QxOrm library class qx::QxModelService<T, S> (models based on services to execute client-server requests)

## Changes in version QxEntityEditor 1.1.6:

- New javascript engine to customize the C++ and DDL SQL export process writing your own custom script
- Integrated debugger to debug your own custom javascript files (for example, putting a breakpoint or logging some traces)
- New plugin to print the entities diagram as a PNG image file and PDF file
- New property parameter UNIQUE (in property params window) used by the DDL SQL generator to create the database schema
- Improve nested models in QxModelView module to be able to use several relationships levels in QML
- Possibility to change the order in the list of properties and list of relationships of an entity
- Change encoding of generated files : now files are UTF-8
- Possibility to put a relative path to the QxEntityEditor project file (*.qxee file) in each plugin location settings

## Changes in version QxEntityEditor 1.1.5:

- New C++ model/view export plugin to manage complex data structure to work with relationships in QML views and Qt model/view architecture (using QxModelView module of QxOrm library)
- Now, with this new export plugin, working on QML with C++ entities has never been so easy !
- New function, menu "Tools >> Plugins scripts", to define your own custom scripts before/after a plugin execution
- New command line parameter --log_sql to trace all SQL queries executed by QxEntityEditor : a QxEntityEditor project file (*.qxee) is just a SQLite database, so it's easy to write your own script to customize some default behaviour
- New option in the C++ export plugin to generate or not the custom directory with all custom files for each entity
- Scrollbar available in the entities viewer

## Changes in version QxEntityEditor 1.1.4:

- Improve import by ODBC plugin to manage relationship, schema and composite key for SQLite, MySQL, PostgreSQL, Oracle and MS SQL Server databases
- New import from SQLite plugin to import SQLite database structure into QxEntityEditor project without having to create an ODBC DSN connexion
- Improve C++ export plugin : add a set of useful methods in generated classes + option to manage relative path to QxOrm library
- New menu to rename a namespace (move all entities to another namespace) and delete a list of entities by namespace
- Fix a bug when executing QxEntityEditor in command line (no GUI)
- Add a viewer mode to open a QxEntityEditor project with unlimited entities count without having a license key (read-only mode)

## Changes in version QxEntityEditor 1.1.3 (first official release):

- New plugin to transfer your data model over network and create quickly client/server applications, using QxService module
- New options to define entity, enum and comment width in entities viewer

## Changes in version QxEntityEditor 1.1.2 (BETA):

- New plugin to generate DDL SQL script (database schema) for SQLite, MySQL, PostgreSQL, Oracle and MS SQL Server databases
- The new DDL SQL plugin manages automatically schema evolution for each project version (ALTER TABLE, ADD COLUMN, DROP INDEX, etc.)
- Add post-it or comments in the entities viewer
- Option to display or not property type in the entities viewer

## Changes in version QxEntityEditor 1.1.1 (BETA):

- First BETA version of QxEntityEditor application
- Provide a graphic way to manage the data model for QxOrm library
- Multi-platform (available for Windows, Linux and Mac OS X) and generate native code for all environments : desktop (Windows, Linux, Mac OS X), embedded and mobile (Android, iOS, Windows Phone, Raspberry Pi, etc.)
- Based on plugins and provides many ways to import/export the data model
- Generate C++ persistent classes automatically (registered into QxOrm context)

| � 2011-202XDL Teamty - ic-east.com |