Try this.
PHP Code:
public void CallDBAgent(SRS_DBA action, int client)
{
if(!IsValidClient(client) && (action == DBA_LOAD || action == DBA_SAVE || action == DBA_INSERT)) return;
if (g_db != null)
{
char steamId[32];
char name[MAX_NAME_LENGTH];
char query[1024];
if(IsValidClient(client))
{
GetClientAuthId(client, AuthId_Steam2, steamId, sizeof(steamId));
GetClientName(client, name, sizeof(name));
Format(g_players[client].steamId, sizeof(steamId), steamId);
Format(g_players[client].name, sizeof(name), name);
ReplaceString(name, sizeof(name), "'", "''", false);
}
switch(action)
{
case DBA_CREATE:
{
char longQuery[8194];
Format(longQuery, sizeof(longQuery), "CREATE TABLE IF NOT EXISTS SRS(CreatedDate DATE DEFAULT (datetime('now','localtime')),LastUpdatedDate DATE DEFAULT (datetime('now','localtime')),SteamId TEXT,Name TEXT NOT NULL,Score REAL DEFAULT 0.0,MaxScore REAL DEFAULT 0.0,PlayedTime REAL DEFAULT 0.0,ComboSound INTEGER DEFAULT 1,ComboEffect INTEGER DEFAULT 1");
for(int i = 0; i < sizeof(g_sSRSCode); i++)
Format(longQuery, sizeof(longQuery), "%s,%s INTEGER DEFAULT 0", longQuery, g_sSRSCode[i]);
Format(longQuery, sizeof(longQuery), "%s,Auto_Open INTEGER DEFAULT 1", longQuery);
Format(longQuery, sizeof(longQuery), "%s,PRIMARY KEY (steamId))", longQuery);
g_db.Query(OnCreateTable, longQuery);
}
case DBA_DROP:
{
g_db.Query(OnUpdateRow, "DROP TABLE SRS");
CallDBAgent(DBA_CREATE, 0);
CPrintToChat(client, "SRS has been rebuilt successfully.")
}
case DBA_ALTER:
{
g_db.Query(OnUpdateRow, "ALTER TABLE SRS ADD COLUMN Auto_Open INTEGER DEFAULT 1");
CPrintToChat(client, "[SRS] Updated.");
// g_db.Query(OnCreateTable, "ALTER TABLE SRS ADD COLUMN MaxScore REAL DEFAULT 0.0");
}
case DBA_TOP10:
{
Format(query, sizeof(query), "SELECT ROW_NUMBER () OVER (ORDER BY score DESC) Rank , * FROM SRS LIMIT 0,10");
g_db.Query(OnSelectTop10Row, query, client);
}
case DBA_LOAD:
{
Format(query, sizeof(query), "SELECT * FROM (SELECT RANK() OVER(ORDER BY t.score DESC, t.CreatedDate DESC) AS globalRank, * FROM (SELECT * FROM srs GROUP BY steamId) AS t) AS rt WHERE rt.steamId = '%s'", steamId);
g_db.Query(OnSelectRow, query, client);
}
case DBA_SAVE:
{
char longQuery[4096];
Format(longQuery, sizeof(longQuery), "UPDATE SRS SET Name='%s',Score=%.3f,MaxScore=%.3f,PlayedTime=%.1f,LastUpdatedDate=datetime('now','localtime'),ComboSound=%b,ComboEffect=%b,Auto_Open=%b", name, g_players[client].fScore[SRS_TYPE_DB],g_players[client].fMaxScore,g_players[client].fPlayedTime[SRS_TYPE_DB],g_players[client].combo.bSound,g_players[client].combo.bEff,g_players[client].bAutoOpen);
// PrintToServer(longQuery);
for(int i=0; i<sizeof(g_sSRSCode); i++) Format(longQuery, sizeof(longQuery), "%s,%s=%d", longQuery, g_sSRSCode[i], g_iSRSs[client][SRS_TYPE_DB][i]);
Format(longQuery, sizeof(longQuery), "%s WHERE steamId='%s'", longQuery, steamId, name);
// DataPack pack = new DataPack();
// g_db.Query(OnUpdateRow, longQuery, pack);
g_db.Query(OnUpdateRow, longQuery, client);
LogMessage("[UPDATE]: \"%L\" saved. Score: %.1f", client, g_players[client].fScore[SRS_TYPE_DB]);
// pack.WriteFloat(g_players[client].fScore[SRS_TYPE_DB]);
// pack.WriteString(name);
// pack.WriteString(steamId);
// DBResultSet rs = SQL_Query(g_db, longQuery, sizeof(longQuery));
// if(rs.AffectedRows>0)
// LogMessage("[UPDATE]: \"%L\" saved. Score: %.1f", client, g_players[client].fScore[SRS_TYPE_DB]);
// else
// LogError("[UPDATE]: Failed to save \"%L\"", client);
}
case DBA_INSERT:
{
// PrintToServer("[SRS] ==========DBA_INSERT(1) %s=======================", steamId)
if(strcmp("STEAM_ID_STOP_IGNORING_RETVALS", steamId, false) == 0) return;
Format(query, sizeof(query), "INSERT INTO SRS(steamId, name) VALUES('%s', '%s')", steamId, name);
g_db.Query(OnInsertRow, query, client);
// PrintToServer("[SRS] ==========DBA_INSERT(2)=======================")
}
}
}
}