QxOrm  1.5.0
C++ Object Relational Mapping library
QxDao.h
Go to the documentation of this file.
00001 /****************************************************************************
00002 **
00003 ** https://www.qxorm.com/
00004 ** Copyright (C) 2013 Lionel Marty (contact@qxorm.com)
00005 **
00006 ** This file is part of the QxOrm library
00007 **
00008 ** This software is provided 'as-is', without any express or implied
00009 ** warranty. In no event will the authors be held liable for any
00010 ** damages arising from the use of this software
00011 **
00012 ** Commercial Usage
00013 ** Licensees holding valid commercial QxOrm licenses may use this file in
00014 ** accordance with the commercial license agreement provided with the
00015 ** Software or, alternatively, in accordance with the terms contained in
00016 ** a written agreement between you and Lionel Marty
00017 **
00018 ** GNU General Public License Usage
00019 ** Alternatively, this file may be used under the terms of the GNU
00020 ** General Public License version 3.0 as published by the Free Software
00021 ** Foundation and appearing in the file 'license.gpl3.txt' included in the
00022 ** packaging of this file. Please review the following information to
00023 ** ensure the GNU General Public License version 3.0 requirements will be
00024 ** met : http://www.gnu.org/copyleft/gpl.html
00025 **
00026 ** If you are unsure which license is appropriate for your use, or
00027 ** if you have questions regarding the use of this file, please contact :
00028 ** contact@qxorm.com
00029 **
00030 ****************************************************************************/
00031 
00032 #ifndef _QX_DAO_H_
00033 #define _QX_DAO_H_
00034 
00035 #ifdef _MSC_VER
00036 #pragma once
00037 #endif
00038 
00046 #include <QtSql/qsqldatabase.h>
00047 #include <QtSql/qsqlquery.h>
00048 #include <QtSql/qsqlrecord.h>
00049 #include <QtSql/qsqlfield.h>
00050 #include <QtSql/qsqlerror.h>
00051 #include <QtSql/qsqldriver.h>
00052 
00053 #include <QxCommon/QxBool.h>
00054 
00055 #include <QxDao/QxSoftDelete.h>
00056 #include <QxDao/QxDaoPointer.h>
00057 #include <QxDao/QxSqlQuery.h>
00058 #include <QxDao/QxSqlSaveMode.h>
00059 
00060 namespace qx {
00061 class QxSqlRelationParams;
00062 namespace dao {
00063 
00064 namespace detail {
00065 class IxDao_Helper;
00066 template <class T> struct QxDao_Count;
00067 template <class T> struct QxDao_Count_WithRelation;
00068 template <class T> struct QxDao_FetchById;
00069 template <class T> struct QxDao_FetchById_WithRelation;
00070 template <class T> struct QxDao_FetchAll;
00071 template <class T> struct QxDao_FetchAll_WithRelation;
00072 template <class T> struct QxDao_Insert;
00073 template <class T> struct QxDao_Insert_WithRelation;
00074 template <class T> struct QxDao_Update;
00075 template <class T> struct QxDao_Update_Optimized;
00076 template <class T> struct QxDao_Update_WithRelation;
00077 template <class T> struct QxDao_Save;
00078 template <class T> struct QxDao_Save_WithRelation;
00079 template <class T> struct QxDao_Save_WithRelation_Recursive;
00080 template <class T> struct QxDao_DeleteById;
00081 template <class T> struct QxDao_DeleteAll;
00082 template <class T> struct QxDao_Exist;
00083 template <class T> struct QxDao_CreateTable;
00084 template <class T> struct QxDao_Trigger;
00085 template <class T> struct QxDao_ExecuteQuery;
00086 } // namespace detail
00087 
00097 template <class T>
00098 inline long count(const qx::QxSqlQuery & query = qx::QxSqlQuery(), QSqlDatabase * pDatabase = NULL)
00099 { return qx::dao::detail::QxDao_Count<T>::count(query, pDatabase); }
00100 
00111 template <class T>
00112 inline QSqlError count(long & lCount, const qx::QxSqlQuery & query = qx::QxSqlQuery(), QSqlDatabase * pDatabase = NULL)
00113 { return qx::dao::detail::QxDao_Count<T>::count(lCount, query, pDatabase); }
00114 
00126 template <class T>
00127 inline QSqlError count_with_relation(long & lCount, const QStringList & relation, const qx::QxSqlQuery & query = qx::QxSqlQuery(), QSqlDatabase * pDatabase = NULL)
00128 { return qx::dao::detail::QxDao_Count_WithRelation<T>::count(lCount, relation, query, pDatabase); }
00129 
00141 template <class T>
00142 inline QSqlError insert(T & t, QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false)
00143 { return qx::dao::detail::QxDao_Insert<T>::insert(t, pDatabase, bUseExecBatch); }
00144 
00157 template <class T>
00158 inline QSqlError save(T & t, QSqlDatabase * pDatabase = NULL)
00159 { return qx::dao::detail::QxDao_Save<T>::save(t, pDatabase); }
00160 
00175 template <class T>
00176 inline QSqlError delete_by_id(T & t, QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false)
00177 { return qx::dao::detail::QxDao_DeleteById<T>::deleteById(t, pDatabase, true, bUseExecBatch); }
00178 
00190 template <class T>
00191 inline QSqlError destroy_by_id(T & t, QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false)
00192 { return qx::dao::detail::QxDao_DeleteById<T>::deleteById(t, pDatabase, false, bUseExecBatch); }
00193 
00206 template <class T>
00207 inline QSqlError delete_all(QSqlDatabase * pDatabase = NULL)
00208 { return qx::dao::detail::QxDao_DeleteAll<T>::deleteAll("", pDatabase, true); }
00209 
00219 template <class T>
00220 inline QSqlError destroy_all(QSqlDatabase * pDatabase = NULL)
00221 { return qx::dao::detail::QxDao_DeleteAll<T>::deleteAll("", pDatabase, false); }
00222 
00236 template <class T>
00237 inline QSqlError delete_by_query(const qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL)
00238 { return qx::dao::detail::QxDao_DeleteAll<T>::deleteAll(query, pDatabase, true); }
00239 
00250 template <class T>
00251 inline QSqlError destroy_by_query(const qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL)
00252 { return qx::dao::detail::QxDao_DeleteAll<T>::deleteAll(query, pDatabase, false); }
00253 
00263 template <class T>
00264 inline QSqlError create_table(QSqlDatabase * pDatabase = NULL)
00265 { return qx::dao::detail::QxDao_CreateTable<T>::createTable(pDatabase); }
00266 
00277 template <class T>
00278 inline qx_bool exist(T & t, QSqlDatabase * pDatabase = NULL)
00279 { return qx::dao::detail::QxDao_Exist<T>::exist(t, pDatabase); }
00280 
00292 template <class T>
00293 inline QSqlError fetch_by_id_with_relation(const QString & relation, T & t, QSqlDatabase * pDatabase = NULL)
00294 { return qx::dao::detail::QxDao_FetchById_WithRelation<T>::fetchById(relation, t, pDatabase); }
00295 
00307 template <class T>
00308 inline QSqlError fetch_by_id_with_relation(const QStringList & relation, T & t, QSqlDatabase * pDatabase = NULL)
00309 { return qx::dao::detail::QxDao_FetchById_WithRelation<T>::fetchById(relation, t, pDatabase); }
00310 
00321 template <class T>
00322 inline QSqlError fetch_by_id_with_all_relation(T & t, QSqlDatabase * pDatabase = NULL)
00323 { return qx::dao::detail::QxDao_FetchById_WithRelation<T>::fetchById("*", t, pDatabase); }
00324 
00336 template <class T>
00337 inline QSqlError fetch_all_with_relation(const QString & relation, T & t, QSqlDatabase * pDatabase = NULL)
00338 { return qx::dao::detail::QxDao_FetchAll_WithRelation<T>::fetchAll(relation, "", t, pDatabase); }
00339 
00351 template <class T>
00352 inline QSqlError fetch_all_with_relation(const QStringList & relation, T & t, QSqlDatabase * pDatabase = NULL)
00353 { return qx::dao::detail::QxDao_FetchAll_WithRelation<T>::fetchAll(relation, "", t, pDatabase); }
00354 
00365 template <class T>
00366 inline QSqlError fetch_all_with_all_relation(T & t, QSqlDatabase * pDatabase = NULL)
00367 { return qx::dao::detail::QxDao_FetchAll_WithRelation<T>::fetchAll("*", "", t, pDatabase); }
00368 
00381 template <class T>
00382 inline QSqlError fetch_by_query_with_relation(const QString & relation, const qx::QxSqlQuery & query, T & t, QSqlDatabase * pDatabase = NULL)
00383 { return qx::dao::detail::QxDao_FetchAll_WithRelation<T>::fetchAll(relation, query, t, pDatabase); }
00384 
00397 template <class T>
00398 inline QSqlError fetch_by_query_with_relation(const QStringList & relation, const qx::QxSqlQuery & query, T & t, QSqlDatabase * pDatabase = NULL)
00399 { return qx::dao::detail::QxDao_FetchAll_WithRelation<T>::fetchAll(relation, query, t, pDatabase); }
00400 
00412 template <class T>
00413 inline QSqlError fetch_by_query_with_all_relation(const qx::QxSqlQuery & query, T & t, QSqlDatabase * pDatabase = NULL)
00414 { return qx::dao::detail::QxDao_FetchAll_WithRelation<T>::fetchAll("*", query, t, pDatabase); }
00415 
00427 template <class T>
00428 inline QSqlError insert_with_relation(const QString & relation, T & t, QSqlDatabase * pDatabase = NULL)
00429 { return qx::dao::detail::QxDao_Insert_WithRelation<T>::insert(relation, t, pDatabase); }
00430 
00442 template <class T>
00443 inline QSqlError insert_with_relation(const QStringList & relation, T & t, QSqlDatabase * pDatabase = NULL)
00444 { return qx::dao::detail::QxDao_Insert_WithRelation<T>::insert(relation, t, pDatabase); }
00445 
00456 template <class T>
00457 inline QSqlError insert_with_all_relation(T & t, QSqlDatabase * pDatabase = NULL)
00458 { return qx::dao::detail::QxDao_Insert_WithRelation<T>::insert("*", t, pDatabase); }
00459 
00471 template <class T>
00472 inline QSqlError update_with_relation(const QString & relation, T & t, QSqlDatabase * pDatabase = NULL)
00473 { return qx::dao::detail::QxDao_Update_WithRelation<T>::update(relation, "", t, pDatabase); }
00474 
00487 template <class T>
00488 inline QSqlError update_by_query_with_relation(const QString & relation, const qx::QxSqlQuery & query, T & t, QSqlDatabase * pDatabase = NULL)
00489 { return qx::dao::detail::QxDao_Update_WithRelation<T>::update(relation, query, t, pDatabase); }
00490 
00502 template <class T>
00503 inline QSqlError update_with_relation(const QStringList & relation, T & t, QSqlDatabase * pDatabase = NULL)
00504 { return qx::dao::detail::QxDao_Update_WithRelation<T>::update(relation, "", t, pDatabase); }
00505 
00518 template <class T>
00519 inline QSqlError update_by_query_with_relation(const QStringList & relation, const qx::QxSqlQuery & query, T & t, QSqlDatabase * pDatabase = NULL)
00520 { return qx::dao::detail::QxDao_Update_WithRelation<T>::update(relation, query, t, pDatabase); }
00521 
00532 template <class T>
00533 inline QSqlError update_with_all_relation(T & t, QSqlDatabase * pDatabase = NULL)
00534 { return qx::dao::detail::QxDao_Update_WithRelation<T>::update("*", "", t, pDatabase); }
00535 
00547 template <class T>
00548 inline QSqlError update_by_query_with_all_relation(const qx::QxSqlQuery & query, T & t, QSqlDatabase * pDatabase = NULL)
00549 { return qx::dao::detail::QxDao_Update_WithRelation<T>::update("*", query, t, pDatabase); }
00550 
00564 template <class T>
00565 inline QSqlError save_with_relation(const QString & relation, T & t, QSqlDatabase * pDatabase = NULL)
00566 { return qx::dao::detail::QxDao_Save_WithRelation<T>::save(relation, t, pDatabase); }
00567 
00581 template <class T>
00582 inline QSqlError save_with_relation(const QStringList & relation, T & t, QSqlDatabase * pDatabase = NULL)
00583 { return qx::dao::detail::QxDao_Save_WithRelation<T>::save(relation, t, pDatabase); }
00584 
00597 template <class T>
00598 inline QSqlError save_with_all_relation(T & t, QSqlDatabase * pDatabase = NULL)
00599 { return qx::dao::detail::QxDao_Save_WithRelation<T>::save("*", t, pDatabase); }
00600 
00620 template <class T>
00621 inline QSqlError save_with_relation_recursive(T & t, qx::dao::save_mode::e_save_mode eSaveMode = qx::dao::save_mode::e_check_insert_or_update, QSqlDatabase * pDatabase = NULL, qx::QxSqlRelationParams * pRelationParams = NULL)
00622 { return qx::dao::detail::QxDao_Save_WithRelation_Recursive<T>::save(t, eSaveMode, pDatabase, pRelationParams); }
00623 
00635 template <class T>
00636 inline QSqlError fetch_by_id(T & t, QSqlDatabase * pDatabase = NULL, const QStringList & columns = QStringList())
00637 { return qx::dao::detail::QxDao_FetchById<T>::fetchById(t, pDatabase, columns); }
00638 
00650 template <class T>
00651 inline QSqlError fetch_all(T & t, QSqlDatabase * pDatabase = NULL, const QStringList & columns = QStringList())
00652 { return qx::dao::detail::QxDao_FetchAll<T>::fetchAll("", t, pDatabase, columns); }
00653 
00666 template <class T>
00667 inline QSqlError fetch_by_query(const qx::QxSqlQuery & query, T & t, QSqlDatabase * pDatabase = NULL, const QStringList & columns = QStringList())
00668 { return qx::dao::detail::QxDao_FetchAll<T>::fetchAll(query, t, pDatabase, columns); }
00669 
00682 template <class T>
00683 inline QSqlError update(T & t, QSqlDatabase * pDatabase = NULL, const QStringList & columns = QStringList(), bool bUseExecBatch = false)
00684 { return qx::dao::detail::QxDao_Update<T>::update("", t, pDatabase, columns, bUseExecBatch); }
00685 
00699 template <class T>
00700 inline QSqlError update_by_query(const qx::QxSqlQuery & query, T & t, QSqlDatabase * pDatabase = NULL, const QStringList & columns = QStringList(), bool bUseExecBatch = false)
00701 { return qx::dao::detail::QxDao_Update<T>::update(query, t, pDatabase, columns, bUseExecBatch); }
00702 
00714 template <class T>
00715 inline QSqlError update_optimized(qx::dao::ptr<T> & ptr, QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false)
00716 { return qx::dao::detail::QxDao_Update_Optimized<T>::update_optimized("", ptr, pDatabase, bUseExecBatch); }
00717 
00730 template <class T>
00731 inline QSqlError update_optimized_by_query(const qx::QxSqlQuery & query, qx::dao::ptr<T> & ptr, QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false)
00732 { return qx::dao::detail::QxDao_Update_Optimized<T>::update_optimized(query, ptr, pDatabase, bUseExecBatch); }
00733 
00742 template <class T>
00743 inline QSqlError execute_query(qx::QxSqlQuery & query, T & t, QSqlDatabase * pDatabase = NULL)
00744 { return qx::dao::detail::QxDao_ExecuteQuery<T>::executeQuery(query, t, pDatabase); }
00745 
00750 template <class T>
00751 inline void on_before_insert(T * t, qx::dao::detail::IxDao_Helper * dao)
00752 { qx::dao::detail::QxDao_Trigger<T>::onBeforeInsert(t, dao); }
00753 
00758 template <class T>
00759 inline void on_before_update(T * t, qx::dao::detail::IxDao_Helper * dao)
00760 { qx::dao::detail::QxDao_Trigger<T>::onBeforeUpdate(t, dao); }
00761 
00766 template <class T>
00767 inline void on_before_delete(T * t, qx::dao::detail::IxDao_Helper * dao)
00768 { qx::dao::detail::QxDao_Trigger<T>::onBeforeDelete(t, dao); }
00769 
00774 template <class T>
00775 inline void on_before_fetch(T * t, qx::dao::detail::IxDao_Helper * dao)
00776 { qx::dao::detail::QxDao_Trigger<T>::onBeforeFetch(t, dao); }
00777 
00782 template <class T>
00783 inline void on_after_insert(T * t, qx::dao::detail::IxDao_Helper * dao)
00784 { qx::dao::detail::QxDao_Trigger<T>::onAfterInsert(t, dao); }
00785 
00790 template <class T>
00791 inline void on_after_update(T * t, qx::dao::detail::IxDao_Helper * dao)
00792 { qx::dao::detail::QxDao_Trigger<T>::onAfterUpdate(t, dao); }
00793 
00798 template <class T>
00799 inline void on_after_delete(T * t, qx::dao::detail::IxDao_Helper * dao)
00800 { qx::dao::detail::QxDao_Trigger<T>::onAfterDelete(t, dao); }
00801 
00806 template <class T>
00807 inline void on_after_fetch(T * t, qx::dao::detail::IxDao_Helper * dao)
00808 { qx::dao::detail::QxDao_Trigger<T>::onAfterFetch(t, dao); }
00809 
00810 } // namespace dao
00811 } // namespace qx
00812 
00813 #endif // _QX_DAO_H_