From c22ff56600163ade7fd4d32beaf5df8bceb118c4 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Sat, 30 Apr 2022 12:28:04 +0430 Subject: [PATCH] Qt6 (#125) Co-authored-by: Hamed Masafi --- .qmake.conf | 2 +- src/nut/core/abstracttableset.cpp | 73 ++++++++++++++++++------------- src/nut/core/abstracttableset.h | 2 +- src/nut/core/database.cpp | 8 ++-- src/nut/core/database.h | 2 +- src/nut/core/table.cpp | 1 - 6 files changed, 49 insertions(+), 39 deletions(-) diff --git a/.qmake.conf b/.qmake.conf index 37b0569..5b955da 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -3,7 +3,7 @@ load(qt_build_config) CONFIG += warning_clean exceptions qt_module_build c++17 DEFINES += QT_DEPRECATED_WARNINGS QT_ASCII_CAST_WARNINGS -MODULE_VERSION = 0.6.0 +MODULE_VERSION = 0.6.1 # had to be added because std::visit only works on macos 10.14 and above # remove again once Qt raises the value to 10.14! diff --git a/src/nut/core/abstracttableset.cpp b/src/nut/core/abstracttableset.cpp index cec5deb..e1b7eb9 100644 --- a/src/nut/core/abstracttableset.cpp +++ b/src/nut/core/abstracttableset.cpp @@ -49,34 +49,27 @@ AbstractTableSet::~AbstractTableSet() t->setParentTableSet(nullptr); } -int AbstractTableSet::save(Database *db, bool cleanUp) +int AbstractTableSet::save(Database *db) { int rowsAffected = 0; TableModel *masterModel = nullptr; if (data->table) - masterModel = db->model().tableByClassName(QString::fromUtf8(data->table->metaObject()->className())); + masterModel = db->model().tableByClassName( + QString::fromUtf8(data->table->metaObject()->className())); - for (auto &t : data->children) { - if (data->table) - t->setParentTable(data->table, - masterModel, - db->model().tableByClassName( - QString::fromUtf8(t->metaObject()->className()))); + for (auto i = data->weakChildren.begin(); i != data->weakChildren.end(); ) { + auto &row = *i; - if (t->status() == Table::Added || t->status() == Table::Modified - || t->status() == Table::Deleted) { - rowsAffected += t->save(db); - if (cleanUp) -#ifdef NUT_RAW_POINTER - t->deleteLater(); -#else - remove(t); -#endif + if (!row) { + i = data->weakChildren.erase(i); + continue; } - } - - for (auto &row : data->weakChildren) { auto t = row.lock(); + if (t.isNull()) { + i = data->weakChildren.erase(i); + continue; + } + if (data->table) t->setParentTable(data->table, masterModel, @@ -86,25 +79,38 @@ int AbstractTableSet::save(Database *db, bool cleanUp) if (t->status() == Table::Added || t->status() == Table::Modified || t->status() == Table::Deleted) { rowsAffected += t->save(db); - if (cleanUp) -#ifdef NUT_RAW_POINTER - t->deleteLater(); -#else - remove(row); -#endif } + i++; } - if (cleanUp) { - data->children.clear(); - data->weakChildren.clear(); + for (auto i = data->children.begin(); i != data->children.end(); ) { + auto &t = *i; + if (!t) { + i = data->children.erase(i); + continue; + } + + if (data->table) + t->setParentTable(data->table, + masterModel, + db->model().tableByClassName( + QString::fromUtf8(t->metaObject()->className()))); + + if (t->status() == Table::Added || t->status() == Table::Modified + || t->status() == Table::Deleted) { + rowsAffected += t->save(db); + data->weakChildren.append(t.toWeakRef()); + } + i++; } + data->children.clear(); + return rowsAffected; } -void AbstractTableSet::clearChildren() -{ + void AbstractTableSet::clearChildren() + { #ifdef NUT_RAW_POINTER for (auto &t: data->children) t->deleteLater(); @@ -130,6 +136,11 @@ void AbstractTableSet::remove(Row t) { data.detach(); data->children.removeAll(t); + +#ifdef NUT_RAW_POINTER + t->deleteLater(); +#endif + } void AbstractTableSet::remove(WeakRow
t) diff --git a/src/nut/core/abstracttableset.h b/src/nut/core/abstracttableset.h index 35d6c6c..36e4b2b 100644 --- a/src/nut/core/abstracttableset.h +++ b/src/nut/core/abstracttableset.h @@ -44,7 +44,7 @@ public: explicit AbstractTableSet(Table *parent); virtual ~AbstractTableSet(); - virtual int save(Database *db, bool cleanUp = false); + virtual int save(Database *db); void clearChildren(); QString childClassName() const; diff --git a/src/nut/core/database.cpp b/src/nut/core/database.cpp index da53f73..7c6c091 100644 --- a/src/nut/core/database.cpp +++ b/src/nut/core/database.cpp @@ -134,7 +134,7 @@ bool DatabasePrivate::updateDatabase() { Q_Q(Database); - QString databaseHistoryName = driver + "\t" + databaseName + "\t" + hostName; + QString databaseHistoryName = driver + QStringLiteral("\t") + databaseName + QStringLiteral("\t") + hostName; if (updatedDatabases.contains(databaseHistoryName)) return true; @@ -331,7 +331,7 @@ bool DatabasePrivate::putModelToDatabase() changeLog->setData(QString::fromUtf8(QJsonDocument(current.toJson()).toJson(QJsonDocument::Compact))); changeLog->setVersion(current.version()); changeLogs->append(changeLog); - q->saveChanges(true); + q->saveChanges(); changeLog->deleteLater(); return true; @@ -597,7 +597,7 @@ void Database::add(AbstractTableSet *t) d->tableSets.insert(t); } -int Database::saveChanges(bool cleanUp) +int Database::saveChanges() { Q_D(Database); @@ -608,7 +608,7 @@ int Database::saveChanges(bool cleanUp) int rowsAffected = 0; for (const auto &ts: qAsConst(d->tableSets)) - rowsAffected += ts->save(this, cleanUp); + rowsAffected += ts->save(this); return rowsAffected; } diff --git a/src/nut/core/database.h b/src/nut/core/database.h index 6df88c6..42bc017 100644 --- a/src/nut/core/database.h +++ b/src/nut/core/database.h @@ -59,7 +59,7 @@ public: QSqlQuery exec(const QString& sql); - int saveChanges(bool cleanUp = true); + int saveChanges(); void cleanUp(); QString databaseName() const; diff --git a/src/nut/core/table.cpp b/src/nut/core/table.cpp index 61ac8b1..b2566d1 100644 --- a/src/nut/core/table.cpp +++ b/src/nut/core/table.cpp @@ -179,7 +179,6 @@ AbstractTableSet *Table::childTableSet(const QString &name) const int Table::save(Database *db) { //Q_D(Table); - QSqlQuery q = db->exec(db->sqlGenerator()->saveRecord(this, db->tableName(QString::fromUtf8(metaObject()->className())))); auto model = db->model().tableByClassName(QString::fromUtf8(metaObject()->className()));