core: Fix 64-bit ID SQLite -> Postgres migration
authorShane Synan <digitalcircuit36939@gmail.com>
Sun, 13 May 2018 22:07:07 +0000 (17:07 -0500)
committerManuel Nickschas <sputnick@quassel-irc.org>
Wed, 23 May 2018 22:33:28 +0000 (00:33 +0200)
commitc0aba6b60277e5329f40513c66725dd0c52ee1b4
tree988ddce055e46bfc3c6bd51d0ecc1fb08926d24a
parent6a835281b265df6a06b7f41109ad2d449899fed0
core: Fix 64-bit ID SQLite -> Postgres migration

Change skipSteps and stepSize() from 32-bit int to qint64, avoiding
integer wraparound during backlog reading for migration.

This only gets triggered when a message with a 64-bit ID exists in
the SQLite backlog before migration.  One can force this by sending
a message with the text 'MARKER_MSG', then running this on the SQLite
database before migration.

INSERT INTO backlog (messageid, time, bufferid, type, flags,
                     senderid, senderprefixes, message)
VALUES (50000000005000000000000,
        (SELECT bufferid FROM backlog WHERE message = 'MARKER_MSG'),
        1, 1,
        (SELECT senderid FROM backlog WHERE message = 'MARKER_MSG'),
        "", "Test 64-bit message");

> Before, debug output
SQLi::readMo - skipSteps 42948, start 2147400383, stop 2147450383
SQLi::readMo - skipSteps 42949, start 2147450383, stop -2147466913
SQLi::readMo - skipSteps 42950, start -2147466913, stop -2147416913
...
SQLi::readMo - skipSteps 85898, start -66913, stop -16913
SQLi::readMo - skipSteps 85899, start -16913, stop 33087
SQLi::readMo - MsgId: 1, message: Connecting to chat.freenode.net:...
PSql::writeMo - MsgId: 1, message: Connecting to chat.freenode.net...
> After, debug output
SQLi::readMo - skipSteps 99999, start 4999950383, stop 5000000383
SQLi::readMo - MsgId: 5000000000, message: Test 64-bit message
PSql::writeMo - MsgId: 5000000000, message: Test 64-bit message
src/core/sqlitestorage.cpp
src/core/sqlitestorage.h