1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-23 22:37:55 +02:00

Fixed database version upgrade

This commit is contained in:
Ivan Savenko
2024-04-16 16:30:35 +03:00
parent 1840666327
commit ff1aa4407c

View File

@@ -33,8 +33,7 @@ void LobbyDatabase::createTables()
description TEXT NOT NULL DEFAULT '', description TEXT NOT NULL DEFAULT '',
status INTEGER NOT NULL DEFAULT 0, status INTEGER NOT NULL DEFAULT 0,
playerLimit INTEGER NOT NULL, playerLimit INTEGER NOT NULL,
creationTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, creationTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
mods TEXT NOT NULL DEFAULT '[]'
); );
)"; )";
@@ -85,26 +84,32 @@ void LobbyDatabase::createTables()
void LobbyDatabase::upgradeDatabase() void LobbyDatabase::upgradeDatabase()
{ {
auto getDatabaseVersionStatement = database->prepare(R"( auto getDatabaseVersionStatement = database->prepare(R"(
PRAGMA schema.user_version PRAGMA user_version
)"); )");
auto setDatabaseVersionStatement = database->prepare(R"( auto upgradeDatabaseVersionStatement = database->prepare(R"(
PRAGMA schema.user_version = ? PRAGMA user_version = 10501
)"); )");
int databaseVersion; int databaseVersion;
getDatabaseVersionStatement->execute(); getDatabaseVersionStatement->execute();
getDatabaseVersionStatement->getColumns(databaseVersion); getDatabaseVersionStatement->getColumns(databaseVersion);
getDatabaseVersionStatement->reset();
if (databaseVersion < 10501) if (databaseVersion < 10501)
{ {
database->prepare(R"( database->prepare(R"(
ALTER TABLE gameRooms ALTER TABLE gameRooms
ADD COLUMN version TEXT NOT NULL DEFAULT ''
ADD COLUMN mods TEXT NOT NULL DEFAULT '{}' ADD COLUMN mods TEXT NOT NULL DEFAULT '{}'
)")->execute(); )")->execute();
setDatabaseVersionStatement->executeOnce(10501); database->prepare(R"(
ALTER TABLE gameRooms
ADD COLUMN version TEXT NOT NULL DEFAULT ''
)")->execute();
upgradeDatabaseVersionStatement->execute();
upgradeDatabaseVersionStatement->reset();
} }
} }
@@ -260,7 +265,7 @@ void LobbyDatabase::prepareStatements()
)"); )");
getActiveGameRoomsStatement = database->prepare(R"( getActiveGameRoomsStatement = database->prepare(R"(
SELECT roomID, hostAccountID, displayName, description, status, playerLimit, mods, strftime('%s',CURRENT_TIMESTAMP)- strftime('%s',gr.creationTime) AS secondsElapsed SELECT roomID, hostAccountID, displayName, description, status, playerLimit, version, mods, strftime('%s',CURRENT_TIMESTAMP)- strftime('%s',gr.creationTime) AS secondsElapsed
FROM gameRooms gr FROM gameRooms gr
LEFT JOIN accounts a ON gr.hostAccountID = a.accountID LEFT JOIN accounts a ON gr.hostAccountID = a.accountID
WHERE status IN (1, 2, 3) WHERE status IN (1, 2, 3)