From e89144eb2d13532dd8802509a48c27e9934113b7 Mon Sep 17 00:00:00 2001 From: fusion32 Date: Wed, 15 Oct 2025 20:27:29 -0300 Subject: implement all postgres queries --- src/database_sqlite.cc | 60 ++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 26 deletions(-) (limited to 'src/database_sqlite.cc') diff --git a/src/database_sqlite.cc b/src/database_sqlite.cc index 8c85244..b50c6df 100644 --- a/src/database_sqlite.cc +++ b/src/database_sqlite.cc @@ -376,11 +376,6 @@ TDatabase *DatabaseOpen(void){ return Database; } -int DatabaseChanges(TDatabase *Database){ - ASSERT(Database != NULL); - return sqlite3_changes(Database->Handle); -} - bool DatabaseCheckpoint(TDatabase *Database){ // IMPORTANT(fusion): Since SQLite is a local database, we don't need to check // whether the connection is still valid or needs reconnecting. @@ -735,7 +730,7 @@ bool IsCharacterOnline(TDatabase *Database, int CharacterID, bool *Online){ return false; } - *Online = (ErrorCode == SQLITE_ROW) && (sqlite3_column_int(Stmt, 0) != 0); + *Online = (ErrorCode == SQLITE_ROW && sqlite3_column_int(Stmt, 0) != 0); return true; } @@ -743,7 +738,8 @@ bool ActivatePendingPremiumDays(TDatabase *Database, int AccountID){ ASSERT(Database != NULL); sqlite3_stmt *Stmt = PrepareQuery(Database, "UPDATE Accounts" - " SET PremiumEnd = MAX(PremiumEnd, UNIXEPOCH()) + PendingPremiumDays * 86400," + " SET PremiumEnd = MAX(PremiumEnd, UNIXEPOCH())" + " + PendingPremiumDays * 86400," " PendingPremiumDays = 0" " WHERE AccountID = ?1 AND PendingPremiumDays > 0"); if(Stmt == NULL){ @@ -1360,11 +1356,11 @@ bool DeleteBuddy(TDatabase *Database, int WorldID, int AccountID, int BuddyID){ bool GetBuddies(TDatabase *Database, int WorldID, int AccountID, DynamicArray *Buddies){ ASSERT(Database != NULL && Buddies != NULL); sqlite3_stmt *Stmt = PrepareQuery(Database, - "SELECT B.BuddyID, C.Name" - " FROM Buddies AS B" - " INNER JOIN Characters AS C" - " ON C.WorldID = B.WorldID AND C.CharacterID = B.BuddyID" - " WHERE B.WorldID = ?1 AND B.AccountID = ?2"); + "SELECT B.BuddyID, C.Name" + " FROM Buddies AS B" + " INNER JOIN Characters AS C" + " ON C.WorldID = B.WorldID AND C.CharacterID = B.BuddyID" + " WHERE B.WorldID = ?1 AND B.AccountID = ?2"); if(Stmt == NULL){ LOG_ERR("Failed to prepare query"); return false; @@ -1395,8 +1391,8 @@ bool GetBuddies(TDatabase *Database, int WorldID, int AccountID, DynamicArray= (UNIXEPOCH() - ?2) AND Failed != 0"); + " WHERE AccountID = ?1" + " AND (UNIXEPOCH() - Timestamp) <= ?2" + " AND Failed != 0"); if(Stmt == NULL){ LOG_ERR("Failed to prepare query"); return false; @@ -1475,7 +1473,9 @@ bool GetIPAddressFailedLoginAttempts(TDatabase *Database, int IPAddress, int Tim ASSERT(Database != NULL && FailedAttempts != NULL); sqlite3_stmt *Stmt = PrepareQuery(Database, "SELECT COUNT(*) FROM LoginAttempts" - " WHERE IPAddress = ?1 AND Timestamp >= (UNIXEPOCH() - ?2) AND Failed != 0"); + " WHERE IPAddress = ?1" + " AND (UNIXEPOCH() - Timestamp) <= ?2" + " AND Failed != 0"); if(Stmt == NULL){ LOG_ERR("Failed to prepare query"); return false; @@ -1506,7 +1506,9 @@ bool FinishHouseAuctions(TDatabase *Database, int WorldID, DynamicArrayHandle)); + Houses[i].HouseID, + sqlite3_errmsg(Database->Handle)); return false; } @@ -1881,7 +1885,8 @@ bool ExcludeFromAuctions(TDatabase *Database, int WorldID, int CharacterID, int // NOTE(fusion): Same as `DecrementIsOnline`. sqlite3_stmt *Stmt = PrepareQuery(Database, "INSERT INTO HouseAuctionExclusions (CharacterID, Issued, Until, BanishmentID)" - " SELECT ?2, UNIXEPOCH(), (UNIXEPOCH() + ?3), ?4 FROM Characters" + " SELECT ?2, UNIXEPOCH(), (UNIXEPOCH() + ?3), ?4" + " FROM Characters" " WHERE WorldID = ?1 AND CharacterID = ?2"); if(Stmt == NULL){ LOG_ERR("Failed to prepare query"); @@ -2256,7 +2261,8 @@ bool InsertStatements(TDatabase *Database, int WorldID, int NumStatements, TStat if(sqlite3_step(Stmt) != SQLITE_DONE){ LOG_ERR("Failed to insert statement %d: %s", - Statements[i].StatementID, sqlite3_errmsg(Database->Handle)); + Statements[i].StatementID, + sqlite3_errmsg(Database->Handle)); return false; } @@ -2339,8 +2345,8 @@ bool MergeKillStatistics(TDatabase *Database, int WorldID, int NumStats, TKillSt sqlite3_stmt *Stmt = PrepareQuery(Database, "INSERT INTO KillStatistics (WorldID, RaceName, TimesKilled, PlayersKilled)" " VALUES (?1, ?2, ?3, ?4)" - " ON CONFLICT DO UPDATE SET TimesKilled = TimesKilled + Excluded.TimesKilled," - " PlayersKilled = PlayersKilled + Excluded.PlayersKilled"); + " ON CONFLICT DO UPDATE SET TimesKilled = TimesKilled + EXCLUDED.TimesKilled," + " PlayersKilled = PlayersKilled + EXCLUDED.PlayersKilled"); if(Stmt == NULL){ LOG_ERR("Failed to prepare query"); return false; @@ -2362,8 +2368,9 @@ bool MergeKillStatistics(TDatabase *Database, int WorldID, int NumStats, TKillSt } if(sqlite3_step(Stmt) != SQLITE_DONE){ - LOG_ERR("Failed to insert \"%s\" stats: %s", - Stats[i].RaceName, sqlite3_errmsg(Database->Handle)); + LOG_ERR("Failed to merge \"%s\" stats: %s", + Stats[i].RaceName, + sqlite3_errmsg(Database->Handle)); return false; } @@ -2456,7 +2463,8 @@ bool InsertOnlineCharacters(TDatabase *Database, int WorldID, if(sqlite3_step(Stmt) != SQLITE_DONE){ LOG_ERR("Failed to insert character \"%s\": %s", - Characters[i].Name, sqlite3_errmsg(Database->Handle)); + Characters[i].Name, + sqlite3_errmsg(Database->Handle)); return false; } -- cgit v1.2.3