diff --git a/3rdparty/serializer b/3rdparty/serializer index e2d8a72..b3c550c 160000 --- a/3rdparty/serializer +++ b/3rdparty/serializer @@ -1 +1 @@ -Subproject commit e2d8a726ef1396c47bf35347ea8b55ca47c6af3b +Subproject commit b3c550c5bb7c570b1b10492fcedf287c1915af39 diff --git a/src/defines.h b/src/defines.h index 86a96a3..22efbb0 100644 --- a/src/defines.h +++ b/src/defines.h @@ -209,6 +209,15 @@ inline Row create() { return QSharedPointer(new T); } +template +inline T *get(T *row) { + return row; +} +template +inline T *get(const QSharedPointer row) { + return row.data(); +} + #else template using RowList = QList; @@ -223,6 +232,17 @@ template inline Row create() { return new T; } + +template +inline T *get(const Row row) { + return row; +} + +template +inline T *get(const QSharedPointer row) { + return row.data(); +} + #endif NUT_END_NAMESPACE diff --git a/src/query.h b/src/query.h index e4c0c9a..1eca189 100644 --- a/src/query.h +++ b/src/query.h @@ -185,7 +185,7 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) d->sql = d->database->sqlGenertor()->selectCommand( d->tableName, d->fieldPhrase, d->wherePhrase, d->orderPhrase, d->relations, d->skip, d->take); - +qDebug()<sql; QSqlQuery q = d->database->exec(d->sql); if (q.lastError().isValid()) { qDebug() << q.lastError().text(); @@ -346,7 +346,7 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) if (m_autoDelete) deleteLater(); #endif - +qDebug() << "len="< class NUT_EXPORT TableSet : public TableSetBase { @@ -114,7 +114,7 @@ Q_OUTOFLINE_TEMPLATE void TableSet::append(Row t) { data->tables.insert(t.data()); data->childRows.append(t.data()); - + data->rowList.append(t); // if (_database) // t->setModel(_database->model().tableByClassName(t->metaObject()->className())); @@ -133,6 +133,7 @@ Q_OUTOFLINE_TEMPLATE void TableSet::append(RowList t) template Q_OUTOFLINE_TEMPLATE void TableSet::remove(T *t) { + data->rowList.removeOne(t); data->tables.remove(t); t->setStatus(Table::Deleted); } diff --git a/src/tablesetbase.cpp b/src/tablesetbase.cpp index 15289ab..1cf0b0d 100644 --- a/src/tablesetbase.cpp +++ b/src/tablesetbase.cpp @@ -51,7 +51,7 @@ int TableSetBase::save(Database *db, bool cleanUp) if (data->table) masterModel = db->model().tableByClassName(data->table->metaObject()->className()); - foreach (Row t, data->childRows) { + foreach (Table *t, data->childRows) { if(data->table) t->setParentTable(data->table, masterModel, @@ -82,18 +82,20 @@ void TableSetBase::clearChilds() data->childRows.clear(); } -void TableSetBase::add(Row
t) +void TableSetBase::add(Table *t) { - if(!data->tables.contains(t.data())){ - data->tables.insert(t.data()); - data->childRows.append(t); + if(!data->tables.contains(get(t))){ + data.detach(); + data->tables.insert(get(t)); + data->childRows.append(get(t)); } } -void TableSetBase::remove(Row
t) +void TableSetBase::remove(Table *t) { - data->tables.remove(t.data()); - data->childRows.removeOne(t); + data.detach(); + data->tables.remove(get(t)); + data->childRows.removeOne(get(t)); } QString TableSetBase::childClassName() const @@ -108,6 +110,7 @@ Database *TableSetBase::database() const void TableSetBase::setDatabase(Database *database) { + data.detach(); data->database = database; } diff --git a/src/tablesetbase_p.h b/src/tablesetbase_p.h index c04072e..15f74df 100644 --- a/src/tablesetbase_p.h +++ b/src/tablesetbase_p.h @@ -58,8 +58,8 @@ protected: QExplicitlySharedDataPointer data; private: - void add(Row
t); - void remove(Row
t); + void add(Nut::Table *t); + void remove(Nut::Table *t); friend class Table; friend class QueryBase; diff --git a/src/tablesetbasedata.h b/src/tablesetbasedata.h index 7e132ed..01ccfeb 100644 --- a/src/tablesetbasedata.h +++ b/src/tablesetbasedata.h @@ -34,6 +34,7 @@ public: TableSetBaseData(Database *parent) : database(parent), table(nullptr) { } + TableSetBaseData(Table *parent) : database(nullptr), table(parent) { } @@ -43,6 +44,7 @@ public: Database *database; Table *table; QString childClassName; + RowList
rowList; }; NUT_END_NAMESPACE diff --git a/test/tst_basic/tst_basic.cpp b/test/tst_basic/tst_basic.cpp index 55d59c3..f728887 100644 --- a/test/tst_basic/tst_basic.cpp +++ b/test/tst_basic/tst_basic.cpp @@ -78,7 +78,7 @@ void BasicTest::createPost() comment->setMessage("comment #" + QString::number(i)); comment->setSaveDate(QDateTime::currentDateTime()); comment->setAuthorId(user->id()); - newPost->comments()->append(comment); + db.comments()->append(comment); } for (int i = 0; i < 10; ++i) { auto score = Nut::create();