QxOrm 1.4.9
C++ Object Relational Mapping library
Loading...
Searching...
No Matches
IxPersistable.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 _IX_PERSISTABLE_H_
33#define _IX_PERSISTABLE_H_
34
35#ifdef _MSC_VER
36#pragma once
37#endif
38
46#include <QxDao/QxSqlQuery.h>
47#include <QxDao/QxDao.h>
48#include <QxDao/QxSqlSaveMode.h>
49
50#include <QxRegister/QxClass.h>
51
53
56
58
59namespace qx {
60
61class IxPersistableCollection;
62
82{
83
84public:
85
87 virtual ~IxPersistable();
88
99 virtual long qxCount(const qx::QxSqlQuery & query = qx::QxSqlQuery(), QSqlDatabase * pDatabase = NULL, const QStringList & relation = QStringList()) = 0;
100
112 virtual QSqlError qxCount(long & lCount, const qx::QxSqlQuery & query = qx::QxSqlQuery(), QSqlDatabase * pDatabase = NULL, const QStringList & relation = QStringList()) = 0;
113
126 virtual QSqlError qxFetchById(const QVariant & id = QVariant(), const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL) = 0;
127
141 virtual QSqlError qxFetchAll(qx::IxPersistableCollection * list = NULL, const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL) = 0;
142
157 virtual QSqlError qxFetchByQuery(const qx::QxSqlQuery & query, qx::IxPersistableCollection * list = NULL, const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL) = 0;
158
170 virtual QSqlError qxInsert(const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false) = 0;
171
185 virtual QSqlError qxUpdate(const qx::QxSqlQuery & query = qx::QxSqlQuery(), const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false) = 0;
186
200 virtual QSqlError qxSave(const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL, qx::dao::save_mode::e_save_mode eSaveRecursiveMode = qx::dao::save_mode::e_none) = 0;
201
216 virtual QSqlError qxDeleteById(const QVariant & id = QVariant(), QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false) = 0;
217
230 virtual QSqlError qxDeleteAll(QSqlDatabase * pDatabase = NULL) = 0;
231
245 virtual QSqlError qxDeleteByQuery(const qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL) = 0;
246
258 virtual QSqlError qxDestroyById(const QVariant & id = QVariant(), QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false) = 0;
259
269 virtual QSqlError qxDestroyAll(QSqlDatabase * pDatabase = NULL) = 0;
270
281 virtual QSqlError qxDestroyByQuery(const qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL) = 0;
282
289 virtual QSqlError qxExecuteQuery(qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL) = 0;
290
298 virtual QSqlError qxExecuteQuery(qx::QxSqlQuery & query, qx::IxPersistableCollection * list = NULL, QSqlDatabase * pDatabase = NULL) = 0;
299
310 virtual qx_bool qxExist(const QVariant & id = QVariant(), QSqlDatabase * pDatabase = NULL) = 0;
311
319 virtual qx::QxInvalidValueX qxValidate(const QStringList & groups = QStringList()) = 0;
320
326 virtual std::shared_ptr<qx::IxPersistableCollection> qxNewPersistableCollection(bool bAsList = false) const = 0;
327
332 virtual qx::IxClass * qxClass() const = 0;
333
334#ifndef _QX_NO_JSON
335 virtual QString toJson(const QString & format = QString()) const = 0;
336 virtual QJsonValue toJson_(const QString & format = QString()) const = 0;
337 virtual qx_bool fromJson(const QString & json, const QString & format = QString()) = 0;
338 virtual qx_bool fromJson_(const QJsonValue & json, const QString & format = QString()) = 0;
339#endif // _QX_NO_JSON
340
341public:
342
343 static std::shared_ptr<qx::IxPersistableCollection> qxFetchAll(const QString & className, const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL, bool bAsList = false);
344 static std::shared_ptr<qx::IxPersistableCollection> qxFetchByQuery(const QString & className, const qx::QxSqlQuery & query, const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL, bool bAsList = false);
345 static std::shared_ptr<qx::IxPersistableCollection> qxExecuteQuery(const QString & className, qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL, bool bAsList = false);
346
347};
348
349typedef std::shared_ptr<qx::IxPersistable> IxPersistable_ptr;
350
351} // namespace qx
352
353namespace qx {
354namespace trait {
355
360template <typename T>
361struct is_ix_persistable
362{ enum { value = std::is_base_of<qx::IxPersistable, T>::value }; };
363
364} // namespace trait
365} // namespace qx
366
367#ifndef _QX_NO_JSON
368#define QX_PERSISTABLE_JSON_HPP(className) \
369virtual QString toJson(const QString & format = QString()) const; \
370virtual QJsonValue toJson_(const QString & format = QString()) const; \
371virtual qx_bool fromJson(const QString & json, const QString & format = QString()); \
372virtual qx_bool fromJson_(const QJsonValue & json, const QString & format = QString());
373#else // _QX_NO_JSON
374#define QX_PERSISTABLE_JSON_HPP(className) /* Nothing */
375#endif // _QX_NO_JSON
376
377#define QX_PERSISTABLE_HPP(className) \
378public: \
379virtual long qxCount(const qx::QxSqlQuery & query = qx::QxSqlQuery(), QSqlDatabase * pDatabase = NULL, const QStringList & relation = QStringList()); \
380virtual QSqlError qxCount(long & lCount, const qx::QxSqlQuery & query = qx::QxSqlQuery(), QSqlDatabase * pDatabase = NULL, const QStringList & relation = QStringList()); \
381virtual QSqlError qxFetchById(const QVariant & id = QVariant(), const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL); \
382virtual QSqlError qxFetchAll(qx::IxPersistableCollection * list = NULL, const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL); \
383virtual QSqlError qxFetchByQuery(const qx::QxSqlQuery & query, qx::IxPersistableCollection * list = NULL, const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL); \
384virtual QSqlError qxInsert(const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false); \
385virtual QSqlError qxUpdate(const qx::QxSqlQuery & query = qx::QxSqlQuery(), const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false); \
386virtual QSqlError qxSave(const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL, qx::dao::save_mode::e_save_mode eSaveRecursiveMode = qx::dao::save_mode::e_none); \
387virtual QSqlError qxDeleteById(const QVariant & id = QVariant(), QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false); \
388virtual QSqlError qxDeleteAll(QSqlDatabase * pDatabase = NULL); \
389virtual QSqlError qxDeleteByQuery(const qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL); \
390virtual QSqlError qxDestroyById(const QVariant & id = QVariant(), QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false); \
391virtual QSqlError qxDestroyAll(QSqlDatabase * pDatabase = NULL); \
392virtual QSqlError qxDestroyByQuery(const qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL); \
393virtual QSqlError qxExecuteQuery(qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL); \
394virtual QSqlError qxExecuteQuery(qx::QxSqlQuery & query, qx::IxPersistableCollection * list = NULL, QSqlDatabase * pDatabase = NULL); \
395virtual qx_bool qxExist(const QVariant & id = QVariant(), QSqlDatabase * pDatabase = NULL); \
396virtual qx::QxInvalidValueX qxValidate(const QStringList & groups = QStringList()); \
397virtual std::shared_ptr<qx::IxPersistableCollection> qxNewPersistableCollection(bool bAsList = false) const; \
398virtual qx::IxClass * qxClass() const; \
399QX_PERSISTABLE_JSON_HPP(className)
400
401#ifdef _QX_NO_RTTI
402#define QX_PERSISTABLE_CAST_COLLECTION(className) \
403if (! list) { return QSqlError(); } \
404qx::QxPersistableCollectionHelper< className >::type_coll * list_typed = static_cast< qx::QxPersistableCollectionHelper< className >::type * >(list);
405#else // _QX_NO_RTTI
406#define QX_PERSISTABLE_CAST_COLLECTION(className) \
407if (! list) { return QSqlError(); } \
408qx::QxPersistableCollectionHelper< className >::type_coll * list_typed = dynamic_cast< qx::QxPersistableCollectionHelper< className >::type * >(list);
409#endif // _QX_NO_RTTI
410
411#ifndef _QX_NO_JSON
412#define QX_PERSISTABLE_JSON_CPP(className) \
413QString className::toJson(const QString & format) const { return qx::serialization::json::to_string((* this), 1, format); } \
414QJsonValue className::toJson_(const QString & format) const { return qx::cvt::to_json((* this), format); } \
415qx_bool className::fromJson(const QString & json, const QString & format) { return qx::serialization::json::from_string((* this), json, 1, format); } \
416qx_bool className::fromJson_(const QJsonValue & json, const QString & format) { return qx::cvt::from_json(json, (* this), format); }
417#else // _QX_NO_JSON
418#define QX_PERSISTABLE_JSON_CPP(className) /* Nothing */
419#endif // _QX_NO_JSON
420
421#define QX_PERSISTABLE_CPP(className) \
422\
423long className::qxCount(const qx::QxSqlQuery & query, QSqlDatabase * pDatabase, const QStringList & relation) \
424{ \
425 if (relation.count() == 0) { return qx::dao::count< className >(query, pDatabase); } \
426 else { long lCount(0); qx::dao::count_with_relation< className >(lCount, relation, query, pDatabase); return lCount; } \
427} \
428\
429QSqlError className::qxCount(long & lCount, const qx::QxSqlQuery & query, QSqlDatabase * pDatabase, const QStringList & relation) \
430{ \
431 if (relation.count() == 0) { return qx::dao::count< className >(lCount, query, pDatabase); } \
432 else { return qx::dao::count_with_relation< className >(lCount, relation, query, pDatabase); } \
433} \
434\
435QSqlError className::qxFetchById(const QVariant & id, const QStringList & columns, const QStringList & relation, QSqlDatabase * pDatabase) \
436{ \
437 if (id.isValid()) \
438 { \
439 qx::IxDataMemberX * pDataMemberX = qx::QxClass< className >::getSingleton()->getDataMemberX(); \
440 qx::IxDataMember * pDataMemberId = (pDataMemberX ? pDataMemberX->getId_WithDaoStrategy() : NULL); \
441 if (! pDataMemberId) { qDebug("[QxOrm] problem with 'qxFetchById()' method : '%s'", "data member id not registered"); qAssert(false); } \
442 if (! pDataMemberId) { return QSqlError("[QxOrm] problem with 'qxFetchById()' method : 'data member id not registered'", "", QSqlError::UnknownError); } \
443 pDataMemberId->fromVariant(this, id, -1, qx::cvt::context::e_database); \
444 } \
445 QSqlError err; \
446 if (relation.count() == 0) { err = qx::dao::fetch_by_id((* this), pDatabase, columns); } \
447 else { err = qx::dao::fetch_by_id_with_relation(relation, (* this), pDatabase); } \
448 return err; \
449} \
450\
451QSqlError className::qxFetchAll(qx::IxPersistableCollection * list, const QStringList & columns, const QStringList & relation, QSqlDatabase * pDatabase) \
452{ \
453 QX_PERSISTABLE_CAST_COLLECTION(className) \
454 if (! list_typed) { qDebug("[QxOrm] problem with 'qxFetchAll()' method : '%s'", "dynamic_cast failed using collection qx::QxCollection< type_primary_key, std::shared_ptr<type> >"); qAssert(false); } \
455 if (! list_typed) { return QSqlError("[QxOrm] problem with 'qxFetchAll()' method : 'dynamic_cast failed using collection qx::QxCollection< type_primary_key, std::shared_ptr<type> >'", "", QSqlError::UnknownError); } \
456 QSqlError err; \
457 if (relation.count() == 0) { err = qx::dao::fetch_all((* list_typed), pDatabase, columns); } \
458 else { err = qx::dao::fetch_all_with_relation(relation, (* list_typed), pDatabase); } \
459 return err; \
460} \
461\
462QSqlError className::qxFetchByQuery(const qx::QxSqlQuery & query, qx::IxPersistableCollection * list, const QStringList & columns, const QStringList & relation, QSqlDatabase * pDatabase) \
463{ \
464 QX_PERSISTABLE_CAST_COLLECTION(className) \
465 if (! list_typed) { qDebug("[QxOrm] problem with 'qxFetchByQuery()' method : '%s'", "dynamic_cast failed using collection qx::QxCollection< type_primary_key, std::shared_ptr<type> >"); qAssert(false); } \
466 if (! list_typed) { return QSqlError("[QxOrm] problem with 'qxFetchByQuery()' method : 'dynamic_cast failed using collection qx::QxCollection< type_primary_key, std::shared_ptr<type> >'", "", QSqlError::UnknownError); } \
467 QSqlError err; \
468 if (relation.count() == 0) { err = qx::dao::fetch_by_query(query, (* list_typed), pDatabase, columns); } \
469 else { err = qx::dao::fetch_by_query_with_relation(relation, query, (* list_typed), pDatabase); } \
470 return err; \
471} \
472\
473QSqlError className::qxInsert(const QStringList & relation, QSqlDatabase * pDatabase, bool bUseExecBatch) \
474{ \
475 QSqlError err; \
476 if (relation.count() == 0) { err = qx::dao::insert((* this), pDatabase, bUseExecBatch); } \
477 else { err = qx::dao::insert_with_relation(relation, (* this), pDatabase); } \
478 return err; \
479} \
480\
481QSqlError className::qxUpdate(const qx::QxSqlQuery & query, const QStringList & columns, const QStringList & relation, QSqlDatabase * pDatabase, bool bUseExecBatch) \
482{ \
483 QSqlError err; \
484 if (relation.count() == 0) { err = qx::dao::update_by_query(query, (* this), pDatabase, columns, bUseExecBatch); } \
485 else { err = qx::dao::update_by_query_with_relation(relation, query, (* this), pDatabase); } \
486 return err; \
487} \
488\
489QSqlError className::qxSave(const QStringList & relation, QSqlDatabase * pDatabase, qx::dao::save_mode::e_save_mode eSaveRecursiveMode) \
490{ \
491 QSqlError err; \
492 if (eSaveRecursiveMode != qx::dao::save_mode::e_none) { err = qx::dao::save_with_relation_recursive((* this), eSaveRecursiveMode, pDatabase); } \
493 else if (relation.count() == 0) { err = qx::dao::save((* this), pDatabase); } \
494 else { err = qx::dao::save_with_relation(relation, (* this), pDatabase); } \
495 return err; \
496} \
497\
498QSqlError className::qxDeleteById(const QVariant & id, QSqlDatabase * pDatabase, bool bUseExecBatch) \
499{ \
500 if (id.isValid()) \
501 { \
502 qx::IxDataMemberX * pDataMemberX = qx::QxClass< className >::getSingleton()->getDataMemberX(); \
503 qx::IxDataMember * pDataMemberId = (pDataMemberX ? pDataMemberX->getId_WithDaoStrategy() : NULL); \
504 if (! pDataMemberId) { qDebug("[QxOrm] problem with 'qxDeleteById()' method : '%s'", "data member id not registered"); qAssert(false); } \
505 if (! pDataMemberId) { return QSqlError("[QxOrm] problem with 'qxDeleteById()' method : 'data member id not registered'", "", QSqlError::UnknownError); } \
506 pDataMemberId->fromVariant(this, id, -1, qx::cvt::context::e_database); \
507 } \
508 return qx::dao::delete_by_id((* this), pDatabase, bUseExecBatch); \
509} \
510\
511QSqlError className::qxDeleteAll(QSqlDatabase * pDatabase) \
512{ \
513 return qx::dao::delete_all< className >(pDatabase); \
514} \
515\
516QSqlError className::qxDeleteByQuery(const qx::QxSqlQuery & query, QSqlDatabase * pDatabase) \
517{ \
518 return qx::dao::delete_by_query< className >(query, pDatabase); \
519} \
520\
521QSqlError className::qxDestroyById(const QVariant & id, QSqlDatabase * pDatabase, bool bUseExecBatch) \
522{ \
523 if (id.isValid()) \
524 { \
525 qx::IxDataMemberX * pDataMemberX = qx::QxClass< className >::getSingleton()->getDataMemberX(); \
526 qx::IxDataMember * pDataMemberId = (pDataMemberX ? pDataMemberX->getId_WithDaoStrategy() : NULL); \
527 if (! pDataMemberId) { qDebug("[QxOrm] problem with 'qxDestroyById()' method : '%s'", "data member id not registered"); qAssert(false); } \
528 if (! pDataMemberId) { return QSqlError("[QxOrm] problem with 'qxDestroyById()' method : 'data member id not registered'", "", QSqlError::UnknownError); } \
529 pDataMemberId->fromVariant(this, id, -1, qx::cvt::context::e_database); \
530 } \
531 return qx::dao::destroy_by_id((* this), pDatabase, bUseExecBatch); \
532} \
533\
534QSqlError className::qxDestroyAll(QSqlDatabase * pDatabase) \
535{ \
536 return qx::dao::destroy_all< className >(pDatabase); \
537} \
538\
539QSqlError className::qxDestroyByQuery(const qx::QxSqlQuery & query, QSqlDatabase * pDatabase) \
540{ \
541 return qx::dao::destroy_by_query< className >(query, pDatabase); \
542} \
543\
544QSqlError className::qxExecuteQuery(qx::QxSqlQuery & query, QSqlDatabase * pDatabase) \
545{ \
546 return qx::dao::execute_query(query, (* this), pDatabase); \
547} \
548\
549QSqlError className::qxExecuteQuery(qx::QxSqlQuery & query, qx::IxPersistableCollection * list, QSqlDatabase * pDatabase) \
550{ \
551 QX_PERSISTABLE_CAST_COLLECTION(className) \
552 if (! list_typed) { qDebug("[QxOrm] problem with 'qxExecuteQuery()' method : '%s'", "dynamic_cast failed using collection qx::QxCollection< type_primary_key, std::shared_ptr<type> >"); qAssert(false); } \
553 if (! list_typed) { return QSqlError("[QxOrm] problem with 'qxExecuteQuery()' method : 'dynamic_cast failed using collection qx::QxCollection< type_primary_key, std::shared_ptr<type> >'", "", QSqlError::UnknownError); } \
554 return qx::dao::execute_query(query, (* list_typed), pDatabase); \
555} \
556\
557qx_bool className::qxExist(const QVariant & id, QSqlDatabase * pDatabase) \
558{ \
559 if (id.isValid()) \
560 { \
561 qx::IxDataMemberX * pDataMemberX = qx::QxClass< className >::getSingleton()->getDataMemberX(); \
562 qx::IxDataMember * pDataMemberId = (pDataMemberX ? pDataMemberX->getId_WithDaoStrategy() : NULL); \
563 if (! pDataMemberId) { qDebug("[QxOrm] problem with 'qxExist()' method : '%s'", "data member id not registered"); qAssert(false); } \
564 if (! pDataMemberId) { return qx_bool(false); } \
565 pDataMemberId->fromVariant(this, id, -1, qx::cvt::context::e_database); \
566 } \
567 return qx::dao::exist((* this), pDatabase); \
568} \
569\
570qx::QxInvalidValueX className::qxValidate(const QStringList & groups) \
571{ \
572 return qx::validate((* this), groups); \
573} \
574\
575std::shared_ptr<qx::IxPersistableCollection> className::qxNewPersistableCollection(bool bAsList) const \
576{ \
577 if (bAsList) { std::shared_ptr<qx::IxPersistableCollection> coll = std::make_shared<qx::QxPersistableList< className > >(); return coll; } \
578 else { std::shared_ptr<qx::IxPersistableCollection> coll = std::make_shared<qx::QxPersistableCollectionHelper< className >::type>(); return coll; } \
579} \
580\
581qx::IxClass * className::qxClass() const \
582{ \
583 return qx::QxClass< className >::getSingleton(); \
584} \
585\
586QX_PERSISTABLE_JSON_CPP(className)
587
589
590#include <QxDao/IxPersistableCollection.h>
591
592#endif // _IX_PERSISTABLE_H_
Concrete class registered into QxOrm context.
QxOrm thread-safe container (keep insertion order + quick access by index + quick access by key)
Provide template functions to map C++ class registered into QxOrm context with table database (ORM - ...
List of invalid values.
#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...
To improve performance, if you know that you are just inserting or updating items in database.
Implementation of qx::validate<T>() function (validator engine)
qx::IxClass : common interface for all classes registered into QxOrm context
Definition IxClass.h:69
qx::IxPersistableCollection : common interface (abstract class) for collection persistent classes bas...
qx::IxPersistable : common interface (abstract class) for persistents classes using QX_PERSISTABLE_HP...
static std::shared_ptr< qx::IxPersistableCollection > qxFetchAll(const QString &className, const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL, bool bAsList=false)
virtual QSqlError qxDestroyAll(QSqlDatabase *pDatabase=NULL)=0
Delete all lines of a table (database) mapped to current C++ class (registered into QxOrm context)
virtual QSqlError qxDeleteByQuery(const qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)=0
Delete all lines of a table (database) mapped to current C++ class (registered into QxOrm context) an...
virtual ~IxPersistable()
virtual qx_bool fromJson(const QString &json, const QString &format=QString())=0
virtual QSqlError qxExecuteQuery(qx::QxSqlQuery &query, qx::IxPersistableCollection *list=NULL, QSqlDatabase *pDatabase=NULL)=0
Execute a custom SQL query or a stored procedure, all columns that can be mapped to the instance of t...
virtual QSqlError qxExecuteQuery(qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)=0
Execute a custom SQL query or a stored procedure, all columns that can be mapped to the instance of t...
virtual QSqlError qxSave(const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL, qx::dao::save_mode::e_save_mode eSaveRecursiveMode=qx::dao::save_mode::e_none)=0
Insert (if no exist) or update (if already exist) current instance into database.
virtual QSqlError qxDestroyByQuery(const qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)=0
Delete all lines of a table (database) mapped to current C++ class (registered into QxOrm context) an...
virtual QSqlError qxDeleteById(const QVariant &id=QVariant(), QSqlDatabase *pDatabase=NULL, bool bUseExecBatch=false)=0
Delete current instance from database.
virtual qx::IxClass * qxClass() const =0
Access to introspection engine (or reflection engine) of QxOrm library.
virtual qx_bool fromJson_(const QJsonValue &json, const QString &format=QString())=0
static std::shared_ptr< qx::IxPersistableCollection > qxFetchByQuery(const QString &className, const qx::QxSqlQuery &query, const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL, bool bAsList=false)
virtual std::shared_ptr< qx::IxPersistableCollection > qxNewPersistableCollection(bool bAsList=false) const =0
Create a new collection smart-pointer to fetch a list of items of current class type.
virtual long qxCount(const qx::QxSqlQuery &query=qx::QxSqlQuery(), QSqlDatabase *pDatabase=NULL, const QStringList &relation=QStringList())=0
Return the number of lines in the table (database) mapped to the current C++ class (registered into Q...
virtual QSqlError qxFetchById(const QVariant &id=QVariant(), const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL)=0
Fetch current instance (retrieve all its properties) mapped to a table in the database (current insta...
virtual QSqlError qxFetchAll(qx::IxPersistableCollection *list=NULL, const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL)=0
Fetch a list of objects (retrieve all elements and properties associated) of current type (container ...
virtual QString toJson(const QString &format=QString()) const =0
virtual QJsonValue toJson_(const QString &format=QString()) const =0
virtual QSqlError qxUpdate(const qx::QxSqlQuery &query=qx::QxSqlQuery(), const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL, bool bUseExecBatch=false)=0
Update current instance into database (you can add a user SQL query to the default SQL query builded ...
virtual QSqlError qxCount(long &lCount, const qx::QxSqlQuery &query=qx::QxSqlQuery(), QSqlDatabase *pDatabase=NULL, const QStringList &relation=QStringList())=0
Return the number of lines in the table (database) mapped to the current C++ class (registered into Q...
virtual QSqlError qxInsert(const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL, bool bUseExecBatch=false)=0
Insert current instance into database.
static std::shared_ptr< qx::IxPersistableCollection > qxExecuteQuery(const QString &className, qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL, bool bAsList=false)
virtual QSqlError qxDeleteAll(QSqlDatabase *pDatabase=NULL)=0
Delete all lines of a table (database) mapped to current C++ class (registered into QxOrm context)
virtual QSqlError qxFetchByQuery(const qx::QxSqlQuery &query, qx::IxPersistableCollection *list=NULL, const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL)=0
Fetch a list of objects (retrieve all elements and properties associated) of current type (container ...
virtual qx_bool qxExist(const QVariant &id=QVariant(), QSqlDatabase *pDatabase=NULL)=0
Search if current instance already exists into database.
virtual QSqlError qxDestroyById(const QVariant &id=QVariant(), QSqlDatabase *pDatabase=NULL, bool bUseExecBatch=false)=0
Delete current instance from database.
virtual qx::QxInvalidValueX qxValidate(const QStringList &groups=QStringList())=0
Check if current instance is valid or not.
qx_bool : boolean type with code and description message when an error occured
Definition QxBool.h:71
qx::QxInvalidValueX : list of invalid values
qx::QxSqlQuery : define a user SQL query added to default SQL query builded by QxOrm library,...
Definition QxSqlQuery.h:245
qx::trait::get_class_name<T>::get() : return class name of type T under const char * format,...
#define QX_REGISTER_CLASS_NAME(className)
Root namespace for all QxOrm library features.
std::shared_ptr< qx::IxPersistable > IxPersistable_ptr