MCPcopy Create free account
hub / github.com/awawa-dev/HyperHDR / restoreBackup

Method restoreBackup

sources/db/DBManager.cpp:571–683  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

569}
570
571QString DBManager::restoreBackup(const QJsonObject& backupData)
572{
573 SqlDatabase* idb = getDB();
574 const QJsonObject& message = backupData.value("config").toObject();
575 bool rm = _readonlyMode;
576
577 Info(_log, "Creating DB backup first.");
578 QString resultFile = createLocalBackup();
579 if (!resultFile.isEmpty())
580 Info(_log, "The backup is saved as: %s", QSTRING_CSTR(resultFile));
581 else
582 Warning(_log, "Could not create a backup");
583
584 _readonlyMode = true;
585
586 if (idb->transaction())
587 {
588 SqlQuery queryDelInstances(idb);
589 queryDelInstances.prepare(QString("DELETE FROM instances"));
590
591 SqlQuery queryDelSettings(idb);
592 queryDelSettings.prepare(QString("DELETE FROM settings"));
593
594 if (!queryDelSettings.exec() || !queryDelInstances.exec())
595 {
596 Error(_log, "Failed to clear tables before import");
597 idb->rollback();
598 _readonlyMode = rm;
599 return "Failed to clear tables before import";
600 }
601
602 const QJsonArray instances = message.value("instances").toArray();
603 if (instances.count() > 0)
604 {
605 for (auto value : instances)
606 {
607 QStringList headers, placeholder;
608 QVariantList values;
609 QJsonObject obj = value.toObject();
610
611 foreach(const QString & key, obj.keys())
612 {
613 headers.append(key);
614 placeholder.append("?");
615 if (obj.value(key).isString())
616 values.append(obj.value(key).toString());
617 else
618 values.append(obj.value(key).toInt());
619 }
620
621 SqlQuery queryInstInsert(idb);
622 queryInstInsert.prepare(QString("INSERT INTO %1 ( %2 ) VALUES ( %3 )").arg("instances").arg(headers.join(", ")).arg(placeholder.join(", ")));
623 doAddBindValue(queryInstInsert, values);
624
625 if (!queryInstInsert.exec())
626 {
627 Error(_log, "Failed to create record in table 'instances'. Error: %s", QSTRING_CSTR(idb->error()));
628 idb->rollback();

Callers

nothing calls this directly

Calls 9

isEmptyMethod · 0.80
transactionMethod · 0.80
execMethod · 0.80
rollbackMethod · 0.80
countMethod · 0.80
commitMethod · 0.80
valueMethod · 0.45
prepareMethod · 0.45
errorMethod · 0.45

Tested by

no test coverage detected