From 14b330009bd174f904939aa64d24e04d28feb664 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Tue, 13 May 2014 04:33:38 +1000 Subject: [PATCH] BUGFIX: Found an error in SQL save statements The character's positions are now persistent between logins. --- server/account_management.cpp | 7 +++---- server/character_management.cpp | 9 ++++----- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/server/account_management.cpp b/server/account_management.cpp index 5f82e55..734244f 100644 --- a/server/account_management.cpp +++ b/server/account_management.cpp @@ -31,7 +31,7 @@ static const char* CREATE_USER_ACCOUNT = "INSERT INTO UserAccounts (username) VALUES (?);"; static const char* LOAD_USER_ACCOUNT = "SELECT * FROM UserAccounts WHERE username = ?;"; -static const char* SAVE_USER_ACCOUNT = "INSERT OR REPLACE INTO UserAccounts VALUES (?, ?, ?, ?);"; +static const char* SAVE_USER_ACCOUNT = "UPDATE OR FAIL UserAccounts SET blacklisted = ?2, whitelisted = ?3 WHERE uid = ?1;"; static const char* DELETE_USER_ACCOUNT = "DELETE FROM UserAccounts WHERE uid = ?;"; //------------------------- @@ -135,9 +135,8 @@ int ServerApplication::SaveUserAccount(int uid) { //parameters bool ret = false; ret |= sqlite3_bind_int(statement, 1, uid) != SQLITE_OK; - ret |= sqlite3_bind_text(statement, 2, account.username.c_str(), account.username.size() + 1, SQLITE_STATIC) != SQLITE_OK; - ret |= sqlite3_bind_int(statement, 3, account.blackListed) != SQLITE_OK; - ret |= sqlite3_bind_int(statement, 4, account.whiteListed) != SQLITE_OK; + ret |= sqlite3_bind_int(statement, 2, account.blackListed) != SQLITE_OK; + ret |= sqlite3_bind_int(statement, 3, account.whiteListed) != SQLITE_OK; //check for binding errors if (ret) { diff --git a/server/character_management.cpp b/server/character_management.cpp index 5e0fa60..74209bf 100644 --- a/server/character_management.cpp +++ b/server/character_management.cpp @@ -31,7 +31,7 @@ static const char* CREATE_CHARACTER = "INSERT INTO PlayerCharacters (owner, handle, avatar) VALUES (?, ?, ?);"; static const char* LOAD_CHARACTER = "SELECT * FROM PlayerCharacters WHERE handle = ?;"; -static const char* SAVE_CHARACTER = "INSERT OR REPLACE INTO PlayerCharacters (uid, owner, mapIndex, positionX, positionY) VALUES (?, ?, ?, ?, ?);"; +static const char* SAVE_CHARACTER = "UPDATE OR FAIL PlayerCharacters SET mapIndex = ?2, positionX = ?3, positionY = ?4 WHERE uid = ?1;"; static const char* DELETE_CHARACTER = "DELETE FROM PlayerCharacters WHERE uid = ?;"; //------------------------- @@ -172,10 +172,9 @@ int ServerApplication::SaveCharacter(int uid) { //parameters bool ret = false; ret |= sqlite3_bind_int(statement, 1, uid) != SQLITE_OK; - ret |= sqlite3_bind_int(statement, 2, character.owner) != SQLITE_OK; - ret |= sqlite3_bind_int(statement, 3, character.mapIndex) != SQLITE_OK; - ret |= sqlite3_bind_int(statement, 4, (int)character.position.x) != SQLITE_OK; - ret |= sqlite3_bind_int(statement, 5, (int)character.position.y) != SQLITE_OK; + ret |= sqlite3_bind_int(statement, 2, character.mapIndex) != SQLITE_OK; + ret |= sqlite3_bind_int(statement, 3, (int)character.position.x) != SQLITE_OK; + ret |= sqlite3_bind_int(statement, 4, (int)character.position.y) != SQLITE_OK; //TODO: stats, etc. //check for binding errors