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 : http://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 : <http://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
