32#ifndef _QX_DAO_SESSION_H_
33#define _QX_DAO_SESSION_H_
46#include <QtSql/qsqldatabase.h>
47#include <QtSql/qsqlquery.h>
48#include <QtSql/qsqlerror.h>
49#include <QtSql/qsqldriver.h>
51#include <QtCore/qlist.h>
123 struct QxSessionImpl;
130 QxSession(
const QSqlDatabase & database,
bool bOpenTransaction);
131 QxSession(
const QSqlDatabase & database,
bool bOpenTransaction,
bool bThrowable,
bool bAutoRollbackWhenDestroyed =
false);
154 void ignoreSoftDelete(
bool bIgnoreSoftDelete =
true,
const QStringList & classesToIgnore = QStringList());
167 T *
fetchById(
const QVariant &
id,
const QStringList & columns = QStringList(),
const QStringList & relation = QStringList())
171 if (! pDataMemberId) {
qAssert(
false);
return NULL; }
172 T * t =
new T(); QSqlError err;
176 if (err.isValid()) {
delete t; t = NULL; (* this) += err; }
181 QSqlError
fetchById(T & t,
const QStringList & columns = QStringList(),
const QStringList & relation = QStringList())
186 if (err.isValid()) { (* this) += err; }
191 QSqlError
fetchAll(T & t,
const QStringList & columns = QStringList(),
const QStringList & relation = QStringList())
194 if (relation.count() == 0) { err =
qx::dao::fetch_all(t, this->database(), columns); }
196 if (err.isValid()) { (* this) += err; }
201 QSqlError
fetchByQuery(
const qx::QxSqlQuery & query, T & t,
const QStringList & columns = QStringList(),
const QStringList & relation = QStringList())
206 if (err.isValid()) { (* this) += err; }
211 QSqlError
insert(T & t,
const QStringList & relation = QStringList(),
bool bUseExecBatch =
false)
214 if (relation.count() == 0) { err =
qx::dao::insert(t, this->database(), bUseExecBatch); }
216 if (err.isValid()) { (* this) += err; }
221 QSqlError
update(T & t,
const qx::QxSqlQuery & query =
qx::QxSqlQuery(),
const QStringList & columns = QStringList(),
const QStringList & relation = QStringList(),
bool bUseExecBatch =
false)
226 if (err.isValid()) { (* this) += err; }
231 QSqlError
save(T & t,
const QStringList & relation = QStringList())
234 if (relation.count() == 0) { err =
qx::dao::save(t, this->database()); }
236 if (err.isValid()) { (* this) += err; }
245 if (! pDataMemberId) {
qAssert(
false);
return QSqlError(); }
246 std::shared_ptr<T> t = std::make_shared<T>();
249 if (err.isValid()) { (* this) += err; }
257 if (err.isValid()) { (* this) += err; }
265 if (err.isValid()) { (* this) += err; }
273 if (err.isValid()) { (* this) += err; }
282 if (! pDataMemberId) {
qAssert(
false);
return QSqlError(); }
283 std::shared_ptr<T> t = std::make_shared<T>();
286 if (err.isValid()) { (* this) += err; }
294 if (err.isValid()) { (* this) += err; }
302 if (err.isValid()) { (* this) += err; }
310 if (err.isValid()) { (* this) += err; }
318 if (err.isValid()) { (* this) += err; }
325 if (err.isValid()) { (* this) += err; }
qx_bool : QxOrm library boolean type with code and description message when an error occured
Concrete class registered into QxOrm context.
Provide template functions to map C++ class registered into QxOrm context with table database (ORM - ...
Define a SQL error exception and retrieve QSqlError type of Qt library.
Define a user SQL query added to default SQL query builded by QxOrm library, and used by qx::dao::xxx...
IxDataMemberX * getDataMemberX() const
qx::IxDataMember : common interface for all class properties registered into QxOrm context
virtual qx_bool fromVariant(void *pOwner, const QVariant &v, const QString &sFormat, int iIndexName=-1, qx::cvt::context::ctx_type ctx=qx::cvt::context::e_no_context)=0
qx::IxDataMemberX : common interface for a list of IxDataMember class properties registered into QxOr...
virtual IxDataMember * getId_WithDaoStrategy() const =0
qx_bool : boolean type with code and description message when an error occured
qx::QxClass<T> : concrete class of type T registered into QxOrm context (this class is a singleton an...
qx::QxSession : define a session to manage automatically database transactions (using C++ RAII)
const QSqlDatabase * database() const
QSqlError save(T &t, const QStringList &relation=QStringList())
QxSession(const QSqlDatabase &database, bool bOpenTransaction, bool bThrowable, bool bAutoRollbackWhenDestroyed=false)
static QxSession * getActiveSession(QSqlDatabase *db)
QSqlError count(long &lCount, const qx::QxSqlQuery &query=qx::QxSqlQuery())
QxSession(const QxSession &other)
QList< QSqlError > allErrors() const
bool isAutoRollbackWhenDestroyed() const
QxSession & operator=(const QxSession &other)
QSqlError fetchAll(T &t, const QStringList &columns=QStringList(), const QStringList &relation=QStringList())
QSqlError fetchByQuery(const qx::QxSqlQuery &query, T &t, const QStringList &columns=QStringList(), const QStringList &relation=QStringList())
void setAutoRollbackWhenDestroyed(bool b)
QSqlError deleteById(const QVariant &id)
QxSession(const QSqlDatabase &database, bool bOpenTransaction)
QSqlError fetchById(T &t, const QStringList &columns=QStringList(), const QStringList &relation=QStringList())
QxSession(const QSqlDatabase &database)
long count(const qx::QxSqlQuery &query=qx::QxSqlQuery())
QSqlError executeQuery(qx::QxSqlQuery &query, T &t)
T * fetchById(const QVariant &id, const QStringList &columns=QStringList(), const QStringList &relation=QStringList())
QSqlError destroyByQuery(const qx::QxSqlQuery &query)
std::shared_ptr< QxSessionImpl > m_pImpl
Private implementation idiom (use std::shared_ptr instead of std::unique_ptr because of incomplete ty...
QSqlError deleteByQuery(const qx::QxSqlQuery &query)
QSqlError lastError() const
QSqlError callQuery(qx::QxSqlQuery &query)
QSqlError deleteById(T &t, bool bUseExecBatch=false)
QSqlError destroyById(const QVariant &id)
QSqlDatabase * database()
QSqlError update(T &t, const qx::QxSqlQuery &query=qx::QxSqlQuery(), const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), bool bUseExecBatch=false)
QSqlError firstError() const
bool checkIgnoreSoftDelete(const QString &classKey) const
QSqlError destroyById(T &t, bool bUseExecBatch=false)
QSqlError insert(T &t, const QStringList &relation=QStringList(), bool bUseExecBatch=false)
QString getIgnoreSoftDeleteHash() const
void ignoreSoftDelete(bool bIgnoreSoftDelete=true, const QStringList &classesToIgnore=QStringList())
qx::QxSqlQuery : define a user SQL query added to default SQL query builded by QxOrm library,...
QSqlError destroy_all(QSqlDatabase *pDatabase=NULL)
Destroy all lines of a table (database) mapped to a C++ class T (registered into QxOrm context),...
QSqlError execute_query(qx::QxSqlQuery &query, T &t, QSqlDatabase *pDatabase=NULL)
Execute a custom SQL query or a stored procedure, all columns that can be mapped to the instance of t...
QSqlError save(T &t, QSqlDatabase *pDatabase=NULL)
Insert (if no exist) or update (if already exist) an element or a list of elements into database.
QSqlError fetch_by_id(T &t, QSqlDatabase *pDatabase=NULL, const QStringList &columns=QStringList())
Fetch an object t (retrieve all its properties) of type T (registered into QxOrm context) mapped to a...
QSqlError fetch_by_query_with_relation(const QString &relation, const qx::QxSqlQuery &query, T &t, QSqlDatabase *pDatabase=NULL)
Fetch a list of objects (retrieve all elements and properties associated) of type T (container regist...
QX_DLL_EXPORT QSqlError call_query(qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)
qx::dao::call_query function can be used to call a custom SQL query or a stored procedure
QSqlError fetch_by_id_with_relation(const QString &relation, T &t, QSqlDatabase *pDatabase=NULL)
Fetch an object t (retrieve all its properties) of type T (registered into QxOrm context) mapped to a...
QSqlError delete_by_id(T &t, QSqlDatabase *pDatabase=NULL, bool bUseExecBatch=false)
Delete a line (or list of lines) of a table (database) mapped to a C++ object of type T (registered i...
qx_bool exist(T &t, QSqlDatabase *pDatabase=NULL)
Search if an element (or list of elements) already exists into database.
QSqlError save_with_relation(const QString &relation, T &t, QSqlDatabase *pDatabase=NULL)
Insert (if no exist) or update (if already exist) an element and its relationships (or a list of elem...
QSqlError insert_with_relation(const QString &relation, T &t, QSqlDatabase *pDatabase=NULL)
Insert an element and its relationships (or a list of elements + relationships) into database.
QSqlError insert(T &t, QSqlDatabase *pDatabase=NULL, bool bUseExecBatch=false)
Insert an element or a list of elements into database.
QSqlError destroy_by_query(const qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)
Destroy all lines of a table (database) mapped to a C++ class T (registered into QxOrm context) and f...
QSqlError delete_all(QSqlDatabase *pDatabase=NULL)
Delete all lines of a table (database) mapped to a C++ class T (registered into QxOrm context)
QSqlError update_by_query(const qx::QxSqlQuery &query, T &t, QSqlDatabase *pDatabase=NULL, const QStringList &columns=QStringList(), bool bUseExecBatch=false)
Update an element or a list of elements into database (adding a user SQL query to the default SQL que...
QSqlError fetch_by_query(const qx::QxSqlQuery &query, T &t, QSqlDatabase *pDatabase=NULL, const QStringList &columns=QStringList())
Fetch a list of objects (retrieve all elements and properties associated) of type T (container regist...
QSqlError update_by_query_with_relation(const QString &relation, const qx::QxSqlQuery &query, T &t, QSqlDatabase *pDatabase=NULL)
Update an element and its relationships (or a list of elements + relationships) into database (adding...
QSqlError fetch_all(T &t, QSqlDatabase *pDatabase=NULL, const QStringList &columns=QStringList())
Fetch a list of objects (retrieve all elements and properties associated) of type T (container regist...
QSqlError delete_by_query(const qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)
Delete all lines of a table (database) mapped to a C++ class T (registered into QxOrm context) and fi...
QSqlError fetch_all_with_relation(const QString &relation, T &t, QSqlDatabase *pDatabase=NULL)
Fetch a list of objects (retrieve all elements and properties associated) of type T (container regist...
long count(const qx::QxSqlQuery &query=qx::QxSqlQuery(), QSqlDatabase *pDatabase=NULL)
Return the number of lines in the table (database) mapped to the C++ class T (registered into QxOrm c...
QSqlError destroy_by_id(T &t, QSqlDatabase *pDatabase=NULL, bool bUseExecBatch=false)
Destroy a line (or list of lines) of a table (database) mapped to a C++ object of type T (registered ...
Root namespace for all QxOrm library features.