32#ifndef _QX_SQL_RELATION_ONE_TO_MANY_H_
33#define _QX_SQL_RELATION_ONE_TO_MANY_H_
54template <
class DataType,
class Owner>
98 if (this->
isNullData(params)) {
return QSqlError(); }
121 if (! this->
verifyOffset(params,
true)) {
return NULL; }
122 QSqlQuery & query = params.
query();
128 long lOffsetRelation = (lOffsetOld + lOffsetId + lOffsetForeign);
130 bool bValidId(
false), bValidForeign(
false);
138 if (! bValidId || ! bValidForeign) {
return NULL; }
142 type_data & item_val = item.value_qx();
160 while ((p = this->
nextData(lIndex)))
167 void * pOwnerOld = params.
owner(); params.
setOwner(& item_val);
178 if (! type_item::is_value_pointer && pValue) {
return pValue; }
187 if (! bForce || ! params.
owner()) {
return; }
192 QList<QVariant> vIdOwner;
198 type_iterator itr = type_generic_container::begin(container, item);
199 type_iterator itr_end = type_generic_container::end(container);
201 while (itr != itr_end)
204 for (
int i = 0; i < vIdOwner.count(); i++)
206 itr = type_generic_container::next(container, itr, item);
Base class for all relationships defined between 2 classes (or between 2 tables in database)
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
virtual QVariant toVariant(const void *pOwner, const QString &sFormat, int iIndexName=-1, qx::cvt::context::ctx_type ctx=qx::cvt::context::e_no_context) const =0
qx::IxSqlRelation : common interface for all relationships defined between 2 classes (or between 2 ta...
bool addLazyRelation(QxSqlRelationParams ¶ms, IxSqlRelation *pRelation) const
QVariant getIdFromQuery_OneToMany(bool bEager, QxSqlRelationParams ¶ms, int iOffset, int iNameIndex) const
IxDataMember * getDataByKey(const QString &sKey) const
void eagerSelect_OneToMany(QxSqlRelationParams ¶ms) const
IxDataMember * getDataId() const
virtual void lazyFetch_ResolveOutput(QxSqlRelationParams ¶ms) const =0
bool verifyOffset(QxSqlRelationParams ¶ms, bool bId) const QX_USED
IxDataMember * nextData(long &lIndex) const
IxSqlRelation * nextRelation(long &lIndex) const
IxDataMember * getDataIdOwner() const
QString getForeignKey() const
void setRelationType(relation_type e)
void updateOffset_OneToMany(bool bEager, QxSqlRelationParams ¶ms) const
void eagerWhereSoftDelete_OneToMany(QxSqlRelationParams ¶ms) const
void setForeignKey(const QString &s) const
void eagerJoin_OneToMany(QxSqlRelationParams ¶ms) const
static QxSqlDatabase * getSingleton()
bool getForceParentIdToAllChildren() const
qx::QxSqlRelation_OneToMany<DataType, Owner> : manage a relationship one-to-many defined between 2 cl...
type_generic_container::type_iterator type_iterator
virtual void lazyUpdate(QxSqlRelationParams ¶ms) const
QxSqlRelation< DataType, Owner >::type_container type_container
virtual void lazyInsert_Values(QxSqlRelationParams ¶ms) const
virtual void lazyWhere(QxSqlRelationParams ¶ms) const
virtual void lazyInsert_ResolveInput(QxSqlRelationParams ¶ms) const
virtual void lazyInsert(QxSqlRelationParams ¶ms) const
QxSqlRelation< DataType, Owner >::type_data type_data
virtual void updateOffset(bool bEager, QxSqlRelationParams ¶ms) const
type_item::type_value type_value
virtual QString createExtraTable() const
virtual bool getCartesianProduct() const
void forceParentIdToAllChildren(QxSqlRelationParams ¶ms) const
QxSqlRelation< DataType, Owner >::type_item type_item
virtual void createTable(QxSqlRelationParams ¶ms) const
virtual void lazyUpdate_ResolveInput(QxSqlRelationParams ¶ms) const
virtual void eagerFetch_ResolveInput(QxSqlRelationParams ¶ms) const
virtual ~QxSqlRelation_OneToMany()
virtual void eagerWhere(QxSqlRelationParams ¶ms) const
virtual QSqlError onBeforeSave(QxSqlRelationParams ¶ms) const
virtual void eagerSelect(QxSqlRelationParams ¶ms) const
virtual void eagerFrom(QxSqlRelationParams ¶ms) const
QxSqlRelation_OneToMany(IxDataMember *p, const QString &sForeignKey)
virtual void lazyJoin(QxSqlRelationParams ¶ms) const
virtual void eagerWhereSoftDelete(QxSqlRelationParams ¶ms) const
virtual void eagerJoin(QxSqlRelationParams ¶ms) const
virtual void lazySelect(QxSqlRelationParams ¶ms) const
virtual QString getDescription() const
virtual void lazyFetch_ResolveOutput(QxSqlRelationParams ¶ms) const
virtual QVariant getIdFromQuery(bool bEager, QxSqlRelationParams ¶ms, int iOffset, int iNameIndex) const
virtual void * eagerFetch_ResolveOutput(QxSqlRelationParams ¶ms) const
QxSqlRelation< DataType, Owner >::type_owner type_owner
virtual void lazyFetch_ResolveInput(QxSqlRelationParams ¶ms) const
virtual void lazyFrom(QxSqlRelationParams ¶ms) const
QxSqlRelation< DataType, Owner >::type_generic_container type_generic_container
virtual void lazyWhereSoftDelete(QxSqlRelationParams ¶ms) const
virtual QSqlError onAfterSave(QxSqlRelationParams ¶ms) const
qx::QxSqlRelation<DataType, Owner> : base class for all relationships defined between 2 classes (or b...
bool callTriggerBeforeFetch(type_data &t, QxSqlRelationParams ¶ms) const
bool isNullData(QxSqlRelationParams ¶ms) const
QxSqlRelation< DataType, Owner >::type_tmp_3 type_data
type_tmp_2 type_container
type_container & getContainer(QxSqlRelationParams ¶ms) const
bool callTriggerAfterFetch(type_data &t, QxSqlRelationParams ¶ms) const
type_item createItem() const
qx::QxSqlRelationParams : define list of parameters to transfer to relationships to manage SQL querie...
void setOwner(void *pOwner)
void setCustomAliasOwner(const QString &s)
void setOffset(long lOffset)
void setIndexOwner(long lIndex)
QString getCustomAlias() const
QSqlDatabase & database()
bool checkColumns(const QString &s) const
qx::dao::save_mode::e_save_mode saveMode() const
QString getCustomAliasOwner() const
type_lst_relation_linked * relationX() const
bool recursiveMode() const
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 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...
qx_bool from_variant(const QVariant &v, T &t, const QString &format=QString(), int index=-1, qx::cvt::context::ctx_type ctx=qx::cvt::context::e_no_context)
bool is_valid_primary_key(const T &t)
Root namespace for all QxOrm library features.
qx::trait::generic_container<T> : provide some tools to manage all containers without knowing its typ...