parent
ad6eab9de1
commit
c22ff56600
|
|
@ -3,7 +3,7 @@ load(qt_build_config)
|
||||||
CONFIG += warning_clean exceptions qt_module_build c++17
|
CONFIG += warning_clean exceptions qt_module_build c++17
|
||||||
DEFINES += QT_DEPRECATED_WARNINGS QT_ASCII_CAST_WARNINGS
|
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
|
# 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!
|
# remove again once Qt raises the value to 10.14!
|
||||||
|
|
|
||||||
|
|
@ -49,34 +49,27 @@ AbstractTableSet::~AbstractTableSet()
|
||||||
t->setParentTableSet(nullptr);
|
t->setParentTableSet(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
int AbstractTableSet::save(Database *db, bool cleanUp)
|
int AbstractTableSet::save(Database *db)
|
||||||
{
|
{
|
||||||
int rowsAffected = 0;
|
int rowsAffected = 0;
|
||||||
TableModel *masterModel = nullptr;
|
TableModel *masterModel = nullptr;
|
||||||
if (data->table)
|
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) {
|
for (auto i = data->weakChildren.begin(); i != data->weakChildren.end(); ) {
|
||||||
if (data->table)
|
auto &row = *i;
|
||||||
t->setParentTable(data->table,
|
|
||||||
masterModel,
|
|
||||||
db->model().tableByClassName(
|
|
||||||
QString::fromUtf8(t->metaObject()->className())));
|
|
||||||
|
|
||||||
if (t->status() == Table::Added || t->status() == Table::Modified
|
if (!row) {
|
||||||
|| t->status() == Table::Deleted) {
|
i = data->weakChildren.erase(i);
|
||||||
rowsAffected += t->save(db);
|
continue;
|
||||||
if (cleanUp)
|
|
||||||
#ifdef NUT_RAW_POINTER
|
|
||||||
t->deleteLater();
|
|
||||||
#else
|
|
||||||
remove(t);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for (auto &row : data->weakChildren) {
|
|
||||||
auto t = row.lock();
|
auto t = row.lock();
|
||||||
|
if (t.isNull()) {
|
||||||
|
i = data->weakChildren.erase(i);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (data->table)
|
if (data->table)
|
||||||
t->setParentTable(data->table,
|
t->setParentTable(data->table,
|
||||||
masterModel,
|
masterModel,
|
||||||
|
|
@ -86,25 +79,38 @@ int AbstractTableSet::save(Database *db, bool cleanUp)
|
||||||
if (t->status() == Table::Added || t->status() == Table::Modified
|
if (t->status() == Table::Added || t->status() == Table::Modified
|
||||||
|| t->status() == Table::Deleted) {
|
|| t->status() == Table::Deleted) {
|
||||||
rowsAffected += t->save(db);
|
rowsAffected += t->save(db);
|
||||||
if (cleanUp)
|
|
||||||
#ifdef NUT_RAW_POINTER
|
|
||||||
t->deleteLater();
|
|
||||||
#else
|
|
||||||
remove(row);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cleanUp) {
|
for (auto i = data->children.begin(); i != data->children.end(); ) {
|
||||||
data->children.clear();
|
auto &t = *i;
|
||||||
data->weakChildren.clear();
|
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;
|
return rowsAffected;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractTableSet::clearChildren()
|
void AbstractTableSet::clearChildren()
|
||||||
{
|
{
|
||||||
#ifdef NUT_RAW_POINTER
|
#ifdef NUT_RAW_POINTER
|
||||||
for (auto &t: data->children)
|
for (auto &t: data->children)
|
||||||
t->deleteLater();
|
t->deleteLater();
|
||||||
|
|
@ -130,6 +136,11 @@ void AbstractTableSet::remove(Row<Table> t)
|
||||||
{
|
{
|
||||||
data.detach();
|
data.detach();
|
||||||
data->children.removeAll(t);
|
data->children.removeAll(t);
|
||||||
|
|
||||||
|
#ifdef NUT_RAW_POINTER
|
||||||
|
t->deleteLater();
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractTableSet::remove(WeakRow<Table> t)
|
void AbstractTableSet::remove(WeakRow<Table> t)
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ public:
|
||||||
explicit AbstractTableSet(Table *parent);
|
explicit AbstractTableSet(Table *parent);
|
||||||
virtual ~AbstractTableSet();
|
virtual ~AbstractTableSet();
|
||||||
|
|
||||||
virtual int save(Database *db, bool cleanUp = false);
|
virtual int save(Database *db);
|
||||||
void clearChildren();
|
void clearChildren();
|
||||||
QString childClassName() const;
|
QString childClassName() const;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -134,7 +134,7 @@ bool DatabasePrivate::updateDatabase()
|
||||||
{
|
{
|
||||||
Q_Q(Database);
|
Q_Q(Database);
|
||||||
|
|
||||||
QString databaseHistoryName = driver + "\t" + databaseName + "\t" + hostName;
|
QString databaseHistoryName = driver + QStringLiteral("\t") + databaseName + QStringLiteral("\t") + hostName;
|
||||||
|
|
||||||
if (updatedDatabases.contains(databaseHistoryName))
|
if (updatedDatabases.contains(databaseHistoryName))
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -331,7 +331,7 @@ bool DatabasePrivate::putModelToDatabase()
|
||||||
changeLog->setData(QString::fromUtf8(QJsonDocument(current.toJson()).toJson(QJsonDocument::Compact)));
|
changeLog->setData(QString::fromUtf8(QJsonDocument(current.toJson()).toJson(QJsonDocument::Compact)));
|
||||||
changeLog->setVersion(current.version());
|
changeLog->setVersion(current.version());
|
||||||
changeLogs->append(changeLog);
|
changeLogs->append(changeLog);
|
||||||
q->saveChanges(true);
|
q->saveChanges();
|
||||||
changeLog->deleteLater();
|
changeLog->deleteLater();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -597,7 +597,7 @@ void Database::add(AbstractTableSet *t)
|
||||||
d->tableSets.insert(t);
|
d->tableSets.insert(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Database::saveChanges(bool cleanUp)
|
int Database::saveChanges()
|
||||||
{
|
{
|
||||||
Q_D(Database);
|
Q_D(Database);
|
||||||
|
|
||||||
|
|
@ -608,7 +608,7 @@ int Database::saveChanges(bool cleanUp)
|
||||||
|
|
||||||
int rowsAffected = 0;
|
int rowsAffected = 0;
|
||||||
for (const auto &ts: qAsConst(d->tableSets))
|
for (const auto &ts: qAsConst(d->tableSets))
|
||||||
rowsAffected += ts->save(this, cleanUp);
|
rowsAffected += ts->save(this);
|
||||||
|
|
||||||
return rowsAffected;
|
return rowsAffected;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ public:
|
||||||
|
|
||||||
QSqlQuery exec(const QString& sql);
|
QSqlQuery exec(const QString& sql);
|
||||||
|
|
||||||
int saveChanges(bool cleanUp = true);
|
int saveChanges();
|
||||||
void cleanUp();
|
void cleanUp();
|
||||||
|
|
||||||
QString databaseName() const;
|
QString databaseName() const;
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,6 @@ AbstractTableSet *Table::childTableSet(const QString &name) const
|
||||||
int Table::save(Database *db)
|
int Table::save(Database *db)
|
||||||
{
|
{
|
||||||
//Q_D(Table);
|
//Q_D(Table);
|
||||||
|
|
||||||
QSqlQuery q = db->exec(db->sqlGenerator()->saveRecord(this, db->tableName(QString::fromUtf8(metaObject()->className()))));
|
QSqlQuery q = db->exec(db->sqlGenerator()->saveRecord(this, db->tableName(QString::fromUtf8(metaObject()->className()))));
|
||||||
|
|
||||||
auto model = db->model().tableByClassName(QString::fromUtf8(metaObject()->className()));
|
auto model = db->model().tableByClassName(QString::fromUtf8(metaObject()->className()));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue