handling some sqlite inconsistencies more gracefully
authorMarcus Eggenberger <egs@quassel-irc.org>
Tue, 3 Mar 2009 15:46:53 +0000 (16:46 +0100)
committerMarcus Eggenberger <egs@quassel-irc.org>
Tue, 3 Mar 2009 19:57:05 +0000 (20:57 +0100)
src/core/abstractsqlstorage.cpp
src/core/postgresqlstorage.cpp
src/core/postgresqlstorage.h

index 8523d50..6886c0f 100644 (file)
@@ -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)));
   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++;
       return false;
     }
     i++;
index 0421224..8d23a2d 100644 (file)
@@ -1490,6 +1490,7 @@ bool PostgreSqlMigrationWriter::prepareQuery(MigrationObject mo) {
     query = queryString("migrate_write_sender");
     break;
   case Identity:
     query = queryString("migrate_write_sender");
     break;
   case Identity:
+    _validIdentities.clear();
     query = queryString("migrate_write_identity");
     break;
   case IdentityNick:
     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) {
 
 //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);
   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(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);
   bindValue(4, network.encodingcodec);
   bindValue(5, network.decodingcodec);
   bindValue(6, network.servercodec);
index af8aa9c..e3b4e36 100644 (file)
@@ -176,6 +176,8 @@ private:
     QLatin1String field;
     Sequence(const char *table, const char *field) : table(table), field(field) {}
   };
     QLatin1String field;
     Sequence(const char *table, const char *field) : table(table), field(field) {}
   };
+
+  QSet<int> _validIdentities;
 };
 
 #endif
 };
 
 #endif