parent
ad6eab9de1
commit
c22ff56600
|
|
@ -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!
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ public:
|
|||
|
||||
QSqlQuery exec(const QString& sql);
|
||||
|
||||
int saveChanges(bool cleanUp = true);
|
||||
int saveChanges();
|
||||
void cleanUp();
|
||||
|
||||
QString databaseName() const;
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
|
|
|
|||
Loading…
Reference in New Issue