Co-authored-by: Hamed Masafi <hamed.masfi@gmail.com>
This commit is contained in:
Hamed Masafi 2022-04-30 12:28:04 +04:30 committed by GitHub
parent ad6eab9de1
commit c22ff56600
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 49 additions and 39 deletions

View File

@ -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!

View File

@ -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<Table> t)
{
data.detach();
data->children.removeAll(t);
#ifdef NUT_RAW_POINTER
t->deleteLater();
#endif
}
void AbstractTableSet::remove(WeakRow<Table> t)

View File

@ -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;

View File

@ -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;
}

View File

@ -59,7 +59,7 @@ public:
QSqlQuery exec(const QString& sql);
int saveChanges(bool cleanUp = true);
int saveChanges();
void cleanUp();
QString databaseName() const;

View File

@ -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()));