QxOrm 1.4.9
C++ Object Relational Mapping library
Loading...
Searching...
No Matches
IxPersistableList.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_LIST_H_
33#define _IX_PERSISTABLE_LIST_H_
34
35#ifdef _MSC_VER
36#pragma once
37#endif
38
46#include <QxDao/IxPersistable.h>
48
51
52#ifndef _QX_NO_JSON
54#endif // _QX_NO_JSON
55
56namespace qx {
57
62template <typename T>
64{
65
67
68protected:
69
70 QList<std::shared_ptr<T> > m_list;
71
72public:
73
74 QxPersistableList() : qx::IxPersistableCollection() { static_assert(qx_is_valid, "qx_is_valid"); }
75 virtual ~QxPersistableList() { ; }
76
77 virtual long __count() const { return static_cast<long>(m_list.size()); }
78 virtual void __clear() { m_list.clear(); }
79 virtual bool __remove(long idx) { if ((idx < 0) || (idx >= static_cast<long>(m_list.size()))) { return false; } m_list.removeAt(idx); return true; }
80 virtual qx::IxPersistable_ptr __at(long idx) const { if ((idx < 0) || (idx >= static_cast<long>(m_list.size()))) { return qx::IxPersistable_ptr(); } return std::static_pointer_cast<qx::IxPersistable>(m_list.at(idx)); }
81
82 virtual long qxCount(const qx::QxSqlQuery & query = qx::QxSqlQuery(), QSqlDatabase * pDatabase = NULL, const QStringList & relation = QStringList())
83 {
84 if (relation.count() == 0) { return qx::dao::count<T>(query, pDatabase); }
85 else { long lCount(0); qx::dao::count_with_relation<T>(lCount, relation, query, pDatabase); return lCount; }
86 }
87
88 virtual QSqlError qxCount(long & lCount, const qx::QxSqlQuery & query = qx::QxSqlQuery(), QSqlDatabase * pDatabase = NULL, const QStringList & relation = QStringList())
89 {
90 if (relation.count() == 0) { return qx::dao::count<T>(lCount, query, pDatabase); }
91 else { return qx::dao::count_with_relation<T>(lCount, relation, query, pDatabase); }
92 }
93
94 virtual QSqlError qxFetchById(const QVariant & id = QVariant(), const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL)
95 {
96 Q_UNUSED(id); QSqlError err;
97 if (relation.count() == 0) { err = qx::dao::fetch_by_id(m_list, pDatabase, columns); }
98 else { err = qx::dao::fetch_by_id_with_relation(relation, m_list, pDatabase); }
99 return err;
100 }
101
102 virtual QSqlError qxFetchAll(qx::IxPersistableCollection * list = NULL, const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL)
103 {
104 Q_UNUSED(list); QSqlError err;
105 if (relation.count() == 0) { err = qx::dao::fetch_all(m_list, pDatabase, columns); }
106 else { err = qx::dao::fetch_all_with_relation(relation, m_list, pDatabase); }
107 return err;
108 }
109
110 virtual QSqlError qxFetchByQuery(const qx::QxSqlQuery & query, qx::IxPersistableCollection * list = NULL, const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL)
111 {
112 Q_UNUSED(list); QSqlError err;
113 if (relation.count() == 0) { err = qx::dao::fetch_by_query(query, m_list, pDatabase, columns); }
114 else { err = qx::dao::fetch_by_query_with_relation(relation, query, m_list, pDatabase); }
115 return err;
116 }
117
118 virtual QSqlError qxInsert(const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false)
119 {
120 QSqlError err;
121 if (relation.count() == 0) { err = qx::dao::insert(m_list, pDatabase, bUseExecBatch); }
122 else { err = qx::dao::insert_with_relation(relation, m_list, pDatabase); }
123 return err;
124 }
125
126 virtual QSqlError qxUpdate(const qx::QxSqlQuery & query = qx::QxSqlQuery(), const QStringList & columns = QStringList(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false)
127 {
128 QSqlError err;
129 if (relation.count() == 0) { err = qx::dao::update_by_query(query, m_list, pDatabase, columns, bUseExecBatch); }
130 else { err = qx::dao::update_by_query_with_relation(relation, query, m_list, pDatabase); }
131 return err;
132 }
133
134 virtual QSqlError qxSave(const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL, qx::dao::save_mode::e_save_mode eSaveRecursiveMode = qx::dao::save_mode::e_none)
135 {
136 QSqlError err;
137 if (eSaveRecursiveMode != qx::dao::save_mode::e_none) { err = qx::dao::save_with_relation_recursive(m_list, eSaveRecursiveMode, pDatabase); }
138 else if (relation.count() == 0) { err = qx::dao::save(m_list, pDatabase); }
139 else { err = qx::dao::save_with_relation(relation, m_list, pDatabase); }
140 return err;
141 }
142
143 virtual QSqlError qxDeleteById(const QVariant & id = QVariant(), QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false)
144 { Q_UNUSED(id); return qx::dao::delete_by_id(m_list, pDatabase, bUseExecBatch); }
145
146 virtual QSqlError qxDeleteAll(QSqlDatabase * pDatabase = NULL)
147 { return qx::dao::delete_all<T>(pDatabase); }
148
149 virtual QSqlError qxDeleteByQuery(const qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL)
150 { return qx::dao::delete_by_query<T>(query, pDatabase); }
151
152 virtual QSqlError qxDestroyById(const QVariant & id = QVariant(), QSqlDatabase * pDatabase = NULL, bool bUseExecBatch = false)
153 { Q_UNUSED(id); return qx::dao::destroy_by_id(m_list, pDatabase, bUseExecBatch); }
154
155 virtual QSqlError qxDestroyAll(QSqlDatabase * pDatabase = NULL)
156 { return qx::dao::destroy_all<T>(pDatabase); }
157
158 virtual QSqlError qxDestroyByQuery(const qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL)
159 { return qx::dao::destroy_by_query<T>(query, pDatabase); }
160
161 virtual QSqlError qxExecuteQuery(qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL)
162 { return qx::dao::execute_query(query, m_list, pDatabase); }
163
164 virtual QSqlError qxExecuteQuery(qx::QxSqlQuery & query, qx::IxPersistableCollection * list = NULL, QSqlDatabase * pDatabase = NULL)
165 { Q_UNUSED(list); return qxExecuteQuery(query, pDatabase); }
166
167 virtual qx_bool qxExist(const QVariant & id = QVariant(), QSqlDatabase * pDatabase = NULL)
168 { Q_UNUSED(id); return qx::dao::exist(m_list, pDatabase); }
169
170 virtual qx::QxInvalidValueX qxValidate(const QStringList & groups = QStringList())
171 { return qx::validate(m_list, groups); }
172
173 virtual std::shared_ptr<qx::IxPersistableCollection> qxNewPersistableCollection(bool bAsList = false) const
174 { Q_UNUSED(bAsList); std::shared_ptr<qx::IxPersistableCollection> coll = std::make_shared<qx::QxPersistableList<T> >(); return coll; }
175
176 virtual qx::IxClass * qxClass() const
177 { return qx::QxClass<T>::getSingleton(); }
178
179#ifndef _QX_NO_JSON
180
181 virtual QString toJson(const QString & format = QString()) const
182 { return qx::serialization::json::to_string(m_list, 1, format); }
183
184 virtual QJsonValue toJson_(const QString & format = QString()) const
185 { return qx::cvt::to_json(m_list, format); }
186
187 virtual qx_bool fromJson(const QString & json, const QString & format = QString())
188 { return qx::serialization::json::from_string(m_list, json, 1, format); }
189
190 virtual qx_bool fromJson_(const QJsonValue & json, const QString & format = QString())
191 { return qx::cvt::from_json(json, m_list, format); }
192
193#endif // _QX_NO_JSON
194
195};
196
197} // namespace qx
198
200
201#endif // _IX_PERSISTABLE_LIST_H_
Common interface (abstract class) for persistents classes using QX_PERSISTABLE_HPP() and QX_PERSISTAB...
Common interface (abstract class) for collection persistent classes based on qx::IxPersistable and qx...
Provide a serialization engine with Qt QJson classes (this feature requires Qt5)
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_bool : boolean type with code and description message when an error occured
Definition QxBool.h:71
qx::QxInvalidValueX : list of invalid values
qx::QxPersistableList<T> : concrete class for list persistent classes based on qx::IxPersistableColle...
virtual QSqlError qxDestroyById(const QVariant &id=QVariant(), QSqlDatabase *pDatabase=NULL, bool bUseExecBatch=false)
Delete current instance from database.
virtual QSqlError qxInsert(const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL, bool bUseExecBatch=false)
Insert current instance into database.
virtual qx::QxInvalidValueX qxValidate(const QStringList &groups=QStringList())
Check if current instance is valid or not.
virtual QSqlError qxFetchAll(qx::IxPersistableCollection *list=NULL, const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL)
Fetch a list of objects (retrieve all elements and properties associated) of current type (container ...
virtual QSqlError qxDestroyAll(QSqlDatabase *pDatabase=NULL)
Delete all lines of a table (database) mapped to current C++ class (registered into QxOrm context)
virtual qx::IxPersistable_ptr __at(long idx) const
virtual QSqlError qxFetchByQuery(const qx::QxSqlQuery &query, qx::IxPersistableCollection *list=NULL, const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL)
Fetch a list of objects (retrieve all elements and properties associated) of current type (container ...
virtual QSqlError qxDestroyByQuery(const qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)
Delete all lines of a table (database) mapped to current C++ class (registered into QxOrm context) an...
virtual std::shared_ptr< qx::IxPersistableCollection > qxNewPersistableCollection(bool bAsList=false) const
Create a new collection smart-pointer to fetch a list of items of current class type.
virtual QSqlError qxDeleteById(const QVariant &id=QVariant(), QSqlDatabase *pDatabase=NULL, bool bUseExecBatch=false)
Delete current instance from database.
virtual long __count() const
virtual QJsonValue toJson_(const QString &format=QString()) const
virtual QString toJson(const QString &format=QString()) const
virtual QSqlError qxExecuteQuery(qx::QxSqlQuery &query, qx::IxPersistableCollection *list=NULL, QSqlDatabase *pDatabase=NULL)
Execute a custom SQL query or a stored procedure, all columns that can be mapped to the instance of t...
virtual QSqlError qxFetchById(const QVariant &id=QVariant(), const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL)
Fetch current instance (retrieve all its properties) mapped to a table in the database (current insta...
virtual qx_bool fromJson(const QString &json, const QString &format=QString())
virtual qx_bool fromJson_(const QJsonValue &json, const QString &format=QString())
virtual QSqlError qxExecuteQuery(qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)
Execute a custom SQL query or a stored procedure, all columns that can be mapped to the instance of t...
virtual QSqlError qxDeleteByQuery(const qx::QxSqlQuery &query, QSqlDatabase *pDatabase=NULL)
Delete all lines of a table (database) mapped to current C++ class (registered into QxOrm context) an...
virtual qx_bool qxExist(const QVariant &id=QVariant(), QSqlDatabase *pDatabase=NULL)
Search if current instance already exists into database.
virtual bool __remove(long idx)
virtual QSqlError qxDeleteAll(QSqlDatabase *pDatabase=NULL)
Delete all lines of a table (database) mapped to current C++ class (registered into QxOrm context)
virtual QSqlError qxSave(const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL, qx::dao::save_mode::e_save_mode eSaveRecursiveMode=qx::dao::save_mode::e_none)
Insert (if no exist) or update (if already exist) current instance into database.
virtual QSqlError qxCount(long &lCount, const qx::QxSqlQuery &query=qx::QxSqlQuery(), QSqlDatabase *pDatabase=NULL, const QStringList &relation=QStringList())
Return the number of lines in the table (database) mapped to the current C++ class (registered into Q...
virtual QSqlError qxUpdate(const qx::QxSqlQuery &query=qx::QxSqlQuery(), const QStringList &columns=QStringList(), const QStringList &relation=QStringList(), QSqlDatabase *pDatabase=NULL, bool bUseExecBatch=false)
Update current instance into database (you can add a user SQL query to the default SQL query builded ...
virtual long qxCount(const qx::QxSqlQuery &query=qx::QxSqlQuery(), QSqlDatabase *pDatabase=NULL, const QStringList &relation=QStringList())
Return the number of lines in the table (database) mapped to the current C++ class (registered into Q...
QList< std::shared_ptr< T > > m_list
List of persistable instances.
virtual qx::IxClass * qxClass() const
Access to introspection engine (or reflection engine) of QxOrm library.
qx::QxSqlQuery : define a user SQL query added to default SQL query builded by QxOrm library,...
Definition QxSqlQuery.h:245
#define QX_REGISTER_CLASS_NAME_TEMPLATE_1(className)
qx::trait::get_primary_key<T>::type : return primary key type of T, by default primary key is long ty...
QSqlError destroy_all(QSqlDatabase *pDatabase=NULL)
Destroy all lines of a table (database) mapped to a C++ class T (registered into QxOrm context),...
Definition QxDao.h:220
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...
Definition QxDao.h:743
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.
Definition QxDao.h:158
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...
Definition QxDao.h:636
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...
Definition QxDao.h:382
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...
Definition QxDao.h:293
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...
Definition QxDao.h:176
qx_bool exist(T &t, QSqlDatabase *pDatabase=NULL)
Search if an element (or list of elements) already exists into database.
Definition QxDao.h:278
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...
Definition QxDao.h:565
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.
Definition QxDao.h:428
QSqlError insert(T &t, QSqlDatabase *pDatabase=NULL, bool bUseExecBatch=false)
Insert an element or a list of elements into database.
Definition QxDao.h:142
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...
Definition QxDao.h:251
QSqlError delete_all(QSqlDatabase *pDatabase=NULL)
Delete all lines of a table (database) mapped to a C++ class T (registered into QxOrm context)
Definition QxDao.h:207
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...
Definition QxDao.h:700
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...
Definition QxDao.h:667
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...
Definition QxDao.h:488
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...
Definition QxDao.h:651
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...
Definition QxDao.h:237
QSqlError count_with_relation(long &lCount, const QStringList &relation, 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...
Definition QxDao.h:127
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...
Definition QxDao.h:337
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)
Insert (if no exist) or update (if already exist) recursively an element and all levels of relationsh...
Definition QxDao.h:621
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...
Definition QxDao.h:98
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 ...
Definition QxDao.h:191
qx::trait::is_qx_registered<T>::value : return true if T is registered into QxOrm context to provide ...
qx_bool from_json(const QJsonValue &j, T &t, const QString &format=QString())
Definition QxConvert.h:84
QJsonValue to_json(const T &t, const QString &format=QString())
Definition QxConvert.h:83
QString to_string(const T &obj, unsigned int flags=1, const QString &format=QString())
qx_bool from_string(T &obj, const QString &sString, unsigned int flags=1, const QString &format=QString())
Root namespace for all QxOrm library features.
QxInvalidValueX validate(T &t, const QString &group)
std::shared_ptr< qx::IxPersistable > IxPersistable_ptr
qx::trait::is_qx_registered<T>::value : return true if T is registered into QxOrm context to provide ...