diff --git a/src/query.h b/src/query.h index 9b76e35..ca1a7f5 100644 --- a/src/query.h +++ b/src/query.h @@ -289,11 +289,13 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) //create table row Table *table; + Row shp; if (data.table->className() == d->className) { table = new T(); #ifdef NUT_SHARED_POINTER - auto shp = QSharedPointer(qobject_cast(table)); + shp = QSharedPointer(qobject_cast(table)); returnList.append(shp); + d->tableSet->add(shp); #else returnList.append(dynamic_cast(table)); #endif @@ -331,9 +333,13 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) if (!ok) qWarning("Unable to set property %s::%s", table->metaObject()->className(), data.masterFields[i].toLocal8Bit().data()); - table->setParentTableSet( - levels[master].lastRow->childTableSet( - data.table->className())); + + auto tableset = levels[master].lastRow->childTableSet( + data.table->className()); + table->setParentTableSet(tableset); +#ifdef NUT_SHARED_POINTER + tableset->add(qSharedPointerCast(shp)); +#endif } table->setStatus(Table::FeatchedFromDB); diff --git a/src/tablesetbase.cpp b/src/tablesetbase.cpp index 97bcefc..8ee15a0 100644 --- a/src/tablesetbase.cpp +++ b/src/tablesetbase.cpp @@ -42,6 +42,9 @@ TableSetBase::~TableSetBase() { foreach (Table *t, data->tables) t->setParentTableSet(nullptr); + + foreach (Row
t, data->childs) + t->setParentTableSet(nullptr); } int TableSetBase::save(Database *db, bool cleanUp) @@ -101,6 +104,18 @@ void TableSetBase::remove(Table *t) data->childRows.removeOne(get(t)); } +void TableSetBase::add(Row
t) +{ + data.detach(); + data->childs.append(t); +} + +void TableSetBase::remove(Row
t) +{ + data.detach(); + data->childs.removeOne(t); +} + QString TableSetBase::childClassName() const { return data->childClassName; diff --git a/src/tablesetbase_p.h b/src/tablesetbase_p.h index cb8c6d2..5911f42 100644 --- a/src/tablesetbase_p.h +++ b/src/tablesetbase_p.h @@ -57,10 +57,13 @@ protected: // QString _childClassName; QExplicitlySharedDataPointer data; -private: +public://TODO: change this to private void add(Table* t); void remove(Table *t); + void add(Row
t); + void remove(Row
t); + friend class Table; friend class QueryBase; };