QxOrm 1.4.9
C++ Object Relational Mapping library
Loading...
Searching...
No Matches
QxDaoAsync.h
Go to the documentation of this file.
1/****************************************************************************
2**
3** https://www.qxorm.com/
4** Copyright (C) 2013 Lionel Marty (contact@qxorm.com)
5**
6** This file is part of the QxOrm library
7**
8** This software is provided 'as-is', without any express or implied
9** warranty. In no event will the authors be held liable for any
10** damages arising from the use of this software
11**
12** Commercial Usage
13** Licensees holding valid commercial QxOrm licenses may use this file in
14** accordance with the commercial license agreement provided with the
15** Software or, alternatively, in accordance with the terms contained in
16** a written agreement between you and Lionel Marty
17**
18** GNU General Public License Usage
19** Alternatively, this file may be used under the terms of the GNU
20** General Public License version 3.0 as published by the Free Software
21** Foundation and appearing in the file 'license.gpl3.txt' included in the
22** packaging of this file. Please review the following information to
23** ensure the GNU General Public License version 3.0 requirements will be
24** met : http://www.gnu.org/copyleft/gpl.html
25**
26** If you are unsure which license is appropriate for your use, or
27** if you have questions regarding the use of this file, please contact :
28** contact@qxorm.com
29**
30****************************************************************************/
31
32#ifndef _QX_DAO_ASYNC_H_
33#define _QX_DAO_ASYNC_H_
34
35#ifdef _MSC_VER
36#pragma once
37#endif
38
46#ifdef _QX_NO_PRECOMPILED_HEADER
47#ifndef Q_MOC_RUN
48#include <QxPrecompiled.h> // Need to include precompiled header for the generated moc file
49#endif // Q_MOC_RUN
50#endif // _QX_NO_PRECOMPILED_HEADER
51
52#include <QtCore/qqueue.h>
53
54#include <QtSql/qsqlerror.h>
55
56#ifndef Q_MOC_RUN
57#include <QxDao/IxPersistable.h>
58#include <QxDao/QxSqlQuery.h>
59#endif // Q_MOC_RUN
60
61namespace qx {
62namespace dao {
63namespace detail {
64
92
93typedef std::shared_ptr<QxDaoAsyncParams> QxDaoAsyncParams_ptr;
94
99class QX_DLL_EXPORT QxDaoAsyncRunner : public QObject
100{
101
102 Q_OBJECT
103
104public:
105
108
109protected:
110
112
113Q_SIGNALS:
114
115 void queryFinished(const QSqlError & daoError, qx::dao::detail::QxDaoAsyncParams_ptr pDaoParams);
116
117public Q_SLOTS:
118
120
121};
122
123} // namespace detail
124} // namespace dao
125
170class QX_DLL_EXPORT QxDaoAsync : public QThread
171{
172
173 Q_OBJECT
174
175protected:
176
177 QMutex m_mutex;
179
180public:
181
183 virtual ~QxDaoAsync();
184
185 bool asyncCount(const QString & className, const qx::QxSqlQuery & query = qx::QxSqlQuery(), QSqlDatabase * pDatabase = NULL);
186 bool asyncFetchById(IxPersistable_ptr pToFetch, const QVariant & id = QVariant(), const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL);
187 bool asyncFetchAll(const QString & className, const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL);
188 bool asyncFetchByQuery(const QString & className, const qx::QxSqlQuery & query, const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL);
189 bool asyncInsert(IxPersistable_ptr pToInsert, const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL);
190 bool asyncUpdate(IxPersistable_ptr pToUpdate, const qx::QxSqlQuery & query = qx::QxSqlQuery(), const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL);
191 bool asyncSave(IxPersistable_ptr pToSave, const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL);
192 bool asyncDeleteById(IxPersistable_ptr pToDelete, const QVariant & id = QVariant(), QSqlDatabase * pDatabase = NULL);
193 bool asyncDeleteAll(const QString & className, QSqlDatabase * pDatabase = NULL);
194 bool asyncDeleteByQuery(const QString & className, const qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL);
195 bool asyncDestroyById(IxPersistable_ptr pToDestroy, const QVariant & id = QVariant(), QSqlDatabase * pDatabase = NULL);
196 bool asyncDestroyAll(const QString & className, QSqlDatabase * pDatabase = NULL);
197 bool asyncDestroyByQuery(const QString & className, const qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL);
198 bool asyncExecuteQuery(const QString & className, qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL);
199 bool asyncCallQuery(qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL);
200
201 bool isQueryRunning() const { return (m_pDaoParams.get() != NULL); }
202
203protected:
204
205 virtual void run();
206
208
209Q_SIGNALS:
210
212 void queryFinished(const QSqlError & daoError, qx::dao::detail::QxDaoAsyncParams_ptr pDaoParams);
213
214private Q_SLOTS:
215
216 void onQueryFinished(const QSqlError & daoError, qx::dao::detail::QxDaoAsyncParams_ptr pDaoParams);
217
218};
219
220typedef std::shared_ptr<QxDaoAsync> QxDaoAsync_ptr;
221
222} // namespace qx
223
224QX_DLL_EXPORT QDataStream & operator<< (QDataStream & stream, const qx::dao::detail::QxDaoAsyncParams & t) QX_USED;
226
227#endif // _QX_DAO_ASYNC_H_
Common interface (abstract class) for persistents classes using QX_PERSISTABLE_HPP() and QX_PERSISTAB...
QX_DLL_EXPORT QDataStream & operator>>(QDataStream &stream, qx::dao::detail::QxDaoAsyncParams &t) QX_USED
QX_DLL_EXPORT QDataStream & operator<<(QDataStream &stream, const qx::dao::detail::QxDaoAsyncParams &t) QX_USED
#define QX_USED
Definition QxMacro.h:244
#define QX_DLL_EXPORT
Definition QxMacro.h:182
Define a user SQL query added to default SQL query builded by QxOrm library, and used by qx::dao::xxx...
qx::QxDaoAsync : helper class to execute SQL queries in another thread (asynchronous way) using qx::I...
Definition QxDaoAsync.h:171
bool asyncInsert(IxPersistable_ptr pToInsert, const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL)
bool asyncDeleteById(IxPersistable_ptr pToDelete, const QVariant &id=QVariant(), QSqlDatabase *pDatabase=NULL)
bool asyncDestroyById(IxPersistable_ptr pToDestroy, const QVariant &id=QVariant(), QSqlDatabase *pDatabase=NULL)
bool asyncFetchById(IxPersistable_ptr pToFetch, const QVariant &id=QVariant(), const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL)
bool isQueryRunning() const
Definition QxDaoAsync.h:201
virtual ~QxDaoAsync()
void queryFinished(const QSqlError &daoError, qx::dao::detail::QxDaoAsyncParams_ptr pDaoParams)
virtual void run()
void onQueryFinished(const QSqlError &daoError, qx::dao::detail::QxDaoAsyncParams_ptr pDaoParams)
bool asyncDeleteByQuery(const QString &className, const qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)
bool asyncExecuteQuery(const QString &className, qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)
void queryStarted(qx::dao::detail::QxDaoAsyncParams_ptr pDaoParams)
bool asyncFetchByQuery(const QString &className, const qx::QxSqlQuery &query, const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL)
bool asyncDestroyAll(const QString &className, QSqlDatabase *pDatabase=NULL)
bool asyncUpdate(IxPersistable_ptr pToUpdate, const qx::QxSqlQuery &query=qx::QxSqlQuery(), const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL)
bool asyncCallQuery(qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)
QMutex m_mutex
Mutex => qx::QxDaoAsync is thread-safe.
Definition QxDaoAsync.h:177
qx::dao::detail::QxDaoAsyncParams_ptr m_pDaoParams
Parameters to execute query.
Definition QxDaoAsync.h:178
bool asyncDeleteAll(const QString &className, QSqlDatabase *pDatabase=NULL)
bool asyncSave(IxPersistable_ptr pToSave, const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL)
bool asyncFetchAll(const QString &className, const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL)
bool asyncDestroyByQuery(const QString &className, const qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)
bool asyncCount(const QString &className, const qx::QxSqlQuery &query=qx::QxSqlQuery(), QSqlDatabase *pDatabase=NULL)
qx::QxSqlQuery : define a user SQL query added to default SQL query builded by QxOrm library,...
Definition QxSqlQuery.h:245
qx::dao::detail::QxDaoAsyncRunner : class with a slot to execute queries in another thread
Definition QxDaoAsync.h:100
void queryFinished(const QSqlError &daoError, qx::dao::detail::QxDaoAsyncParams_ptr pDaoParams)
void onQueryStarted(qx::dao::detail::QxDaoAsyncParams_ptr pDaoParams)
QSqlError runQuery(qx::dao::detail::QxDaoAsyncParams_ptr pDaoParams)
std::shared_ptr< QxDaoAsyncParams > QxDaoAsyncParams_ptr
Definition QxDaoAsync.h:93
Root namespace for all QxOrm library features.
std::shared_ptr< qx::IxPersistableCollection > IxPersistableCollection_ptr
std::shared_ptr< QxDaoAsync > QxDaoAsync_ptr
Definition QxDaoAsync.h:220
std::shared_ptr< qx::IxPersistable > IxPersistable_ptr
qx::dao::detail::QxDaoAsyncParams : all parameters for qx::QxDaoAsync class to execute queries
Definition QxDaoAsync.h:70
IxPersistableCollection_ptr pListOfInstances
List of instances fetched by query.
Definition QxDaoAsync.h:81
qx::QxSqlQuery query
Query parameter to execute action.
Definition QxDaoAsync.h:78
dao_action daoAction
Action to execute into the thread (asynchronous way)
Definition QxDaoAsync.h:76
bool useExecBatch
If true then use the QSqlQuery::execBatch() method to improve performance inserting/updating/deleting...
Definition QxDaoAsync.h:86
QStringList listRelations
List of relationships parameter to execute action.
Definition QxDaoAsync.h:83
QStringList listColumns
List of columns parameter to execute action.
Definition QxDaoAsync.h:82
QVariant id
Current instance id parameter to execute action.
Definition QxDaoAsync.h:84
QSqlDatabase * pDatabase
Database parameter to execute action.
Definition QxDaoAsync.h:79
IxPersistable_ptr pInstance
Current instance parameter to execute action.
Definition QxDaoAsync.h:80
long daoCount
Dao count value returned by qx::dao::count query.
Definition QxDaoAsync.h:85
QString className
Classname parameter to execute action (must implement qx::IxPersistable interface)
Definition QxDaoAsync.h:77