From d2e0e3150248063f7d8c27ae1680ce7ea665f227 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Tue, 3 Mar 2009 16:46:53 +0100 Subject: [PATCH] handling some sqlite inconsistencies more gracefully --- src/core/abstractsqlstorage.cpp | 2 -- src/core/postgresqlstorage.cpp | 7 ++++++- src/core/postgresqlstorage.h | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/core/abstractsqlstorage.cpp b/src/core/abstractsqlstorage.cpp index 8523d506..6886c0fa 100644 --- a/src/core/abstractsqlstorage.cpp +++ b/src/core/abstractsqlstorage.cpp @@ -460,8 +460,6 @@ bool AbstractSqlMigrationReader::transferMo(MigrationObject moType, T &mo) { while(readMo(mo)) { if(!_writer->writeMo(mo)) { abortMigration(QString("AbstractSqlMigrationReader::transferMo(): unable to transfer Migratable Object of type %1!").arg(AbstractSqlMigrator::migrationObject(moType))); - rollback(); - _writer->rollback(); return false; } i++; diff --git a/src/core/postgresqlstorage.cpp b/src/core/postgresqlstorage.cpp index 04212249..8d23a2dd 100644 --- a/src/core/postgresqlstorage.cpp +++ b/src/core/postgresqlstorage.cpp @@ -1490,6 +1490,7 @@ bool PostgreSqlMigrationWriter::prepareQuery(MigrationObject mo) { query = queryString("migrate_write_sender"); break; case Identity: + _validIdentities.clear(); query = queryString("migrate_write_identity"); break; case IdentityNick: @@ -1532,6 +1533,7 @@ bool PostgreSqlMigrationWriter::writeMo(const SenderMO &sender) { //bool PostgreSqlMigrationWriter::writeIdentity(const IdentityMO &identity) { bool PostgreSqlMigrationWriter::writeMo(const IdentityMO &identity) { + _validIdentities << identity.id.toInt(); bindValue(0, identity.id.toInt()); bindValue(1, identity.userid.toInt()); bindValue(2, identity.identityname); @@ -1569,7 +1571,10 @@ bool PostgreSqlMigrationWriter::writeMo(const NetworkMO &network) { bindValue(0, network.networkid.toInt()); bindValue(1, network.userid.toInt()); bindValue(2, network.networkname); - bindValue(3, network.identityid.toInt()); + if(_validIdentities.contains(network.identityid.toInt())) + bindValue(3, network.identityid.toInt()); + else + bindValue(3, QVariant()); bindValue(4, network.encodingcodec); bindValue(5, network.decodingcodec); bindValue(6, network.servercodec); diff --git a/src/core/postgresqlstorage.h b/src/core/postgresqlstorage.h index af8aa9c3..e3b4e369 100644 --- a/src/core/postgresqlstorage.h +++ b/src/core/postgresqlstorage.h @@ -176,6 +176,8 @@ private: QLatin1String field; Sequence(const char *table, const char *field) : table(table), field(field) {} }; + + QSet _validIdentities; }; #endif -- 2.20.1