X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fsqlitestorage.cpp;h=3e4a40e5c99b1d90f52a29c9362a9e84e6ca12ca;hp=c2c9f0c7c8d5c7bd4fc4577a1e7a0221c5123578;hb=f6781dc095957d65e8fc1683fda1c5a5b9cbedbb;hpb=5e5714fb2abf8feaf9cc4a27a26e86f2f9c45b30 diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index c2c9f0c7..3e4a40e5 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -1078,46 +1078,68 @@ bool SqliteStorage::safeExec(QSqlQuery &query, int retryCount) { // SqliteMigration // ======================================== SqliteMigrationReader::SqliteMigrationReader() - : SqliteStorage() + : SqliteStorage(), + _maxId(0) { } +void SqliteMigrationReader::setMaxId(MigrationObject mo) { + QString queryString; + switch(mo) { + case Sender: + queryString = "SELECT max(senderid) FROM sender"; + break; + case Backlog: + queryString = "SELECT max(messageid) FROM backlog"; + break; + default: + _maxId = 0; + return; + } + QSqlQuery query = logDb().exec(queryString); + query.first(); + _maxId = query.value(0).toInt(); +} + bool SqliteMigrationReader::prepareQuery(MigrationObject mo) { - QString query; + setMaxId(mo); + switch(mo) { case QuasselUser: - query = queryString("migrate_read_quasseluser"); - break; - case Sender: - query = queryString("migrate_read_sender"); + newQuery(queryString("migrate_read_quasseluser"), logDb()); break; case Identity: - query = queryString("migrate_read_identity"); + newQuery(queryString("migrate_read_identity"), logDb()); break; case IdentityNick: - query = queryString("migrate_read_identity_nick"); + newQuery(queryString("migrate_read_identity_nick"), logDb()); break; case Network: - query = queryString("migrate_read_network"); + newQuery(queryString("migrate_read_network"), logDb()); break; case Buffer: - query = queryString("migrate_read_buffer"); + newQuery(queryString("migrate_read_buffer"), logDb()); + break; + case Sender: + newQuery(queryString("migrate_read_sender"), logDb()); + bindValue(0, 0); + bindValue(1, stepSize()); break; case Backlog: - query = queryString("migrate_read_backlog"); + newQuery(queryString("migrate_read_backlog"), logDb()); + bindValue(0, 0); + bindValue(1, stepSize()); break; case IrcServer: - query = queryString("migrate_read_ircserver"); + newQuery(queryString("migrate_read_ircserver"), logDb()); break; case UserSetting: - query = queryString("migrate_read_usersetting"); + newQuery(queryString("migrate_read_usersetting"), logDb()); break; } - newQuery(query, logDb()); return exec(); } -//bool SqliteMigrationReader::readUser(QuasselUserMO &user) { bool SqliteMigrationReader::readMo(QuasselUserMO &user) { if(!next()) return false; @@ -1128,17 +1150,6 @@ bool SqliteMigrationReader::readMo(QuasselUserMO &user) { return true; } -//bool SqliteMigrationReader::readSender(SenderMO &sender) { -bool SqliteMigrationReader::readMo(SenderMO &sender) { - if(!next()) - return false; - - sender.senderId = value(0).toInt(); - sender.sender = value(1).toString(); - return true; -} - -//bool SqliteMigrationReader::readIdentity(IdentityMO &identity) { bool SqliteMigrationReader::readMo(IdentityMO &identity) { if(!next()) return false; @@ -1167,7 +1178,6 @@ bool SqliteMigrationReader::readMo(IdentityMO &identity) { return true; } -//bool SqliteMigrationReader::readIdentityNick(IdentityNickMO &identityNick) { bool SqliteMigrationReader::readMo(IdentityNickMO &identityNick) { if(!next()) return false; @@ -1178,7 +1188,6 @@ bool SqliteMigrationReader::readMo(IdentityNickMO &identityNick) { return true; } -//bool SqliteMigrationReader::readNetwork(NetworkMO &network) { bool SqliteMigrationReader::readMo(NetworkMO &network) { if(!next()) return false; @@ -1208,7 +1217,6 @@ bool SqliteMigrationReader::readMo(NetworkMO &network) { return true; } -//bool SqliteMigrationReader::readBuffer(BufferMO &buffer) { bool SqliteMigrationReader::readMo(BufferMO &buffer) { if(!next()) return false; @@ -1226,10 +1234,38 @@ bool SqliteMigrationReader::readMo(BufferMO &buffer) { return true; } -//bool SqliteMigrationReader::readBacklog(BacklogMO &backlog) { +bool SqliteMigrationReader::readMo(SenderMO &sender) { + int skipSteps = 0; + while(!next()) { + if(sender.senderId < _maxId) { + bindValue(0, sender.senderId + (skipSteps * stepSize())); + bindValue(1, sender.senderId + ((skipSteps + 1) * stepSize())); + skipSteps++; + if(!exec()) + return false; + } else { + return false; + } + } + + sender.senderId = value(0).toInt(); + sender.sender = value(1).toString(); + return true; +} + bool SqliteMigrationReader::readMo(BacklogMO &backlog) { - if(!next()) - return false; + int skipSteps = 0; + while(!next()) { + if(backlog.messageid < _maxId) { + bindValue(0, backlog.messageid.toInt() + (skipSteps * stepSize())); + bindValue(1, backlog.messageid.toInt() + ((skipSteps + 1) * stepSize())); + skipSteps++; + if(!exec()) + return false; + } else { + return false; + } + } backlog.messageid = value(0).toInt(); backlog.time = QDateTime::fromTime_t(value(1).toInt()); @@ -1241,7 +1277,6 @@ bool SqliteMigrationReader::readMo(BacklogMO &backlog) { return true; } -//bool SqliteMigrationReader::readIrcServer(IrcServerMO &ircserver) { bool SqliteMigrationReader::readMo(IrcServerMO &ircserver) { if(!next()) return false; @@ -1263,7 +1298,6 @@ bool SqliteMigrationReader::readMo(IrcServerMO &ircserver) { return true; } -//bool SqliteMigrationReader::readUserSetting(UserSettingMO &userSetting) { bool SqliteMigrationReader::readMo(UserSettingMO &userSetting) { if(!next()) return false; @@ -1274,5 +1308,3 @@ bool SqliteMigrationReader::readMo(UserSettingMO &userSetting) { return true; } - -