commit e6bd1fbb
Remember ignored games to prevent the ids to grow rapidly
Changed files
| M | sql/create_tables/oastat_create_tables_common.sql before |
| M | src/db/Db2CppDb.cpp before |
| M | src/db/Db2CppDb.hpp before |
diff --git a/sql/create_tables/oastat_create_tables_common.sql b/sql/create_tables/oastat_create_tables_common.sql
index e747eae..0f6e35a 100644
--- a/sql/create_tables/oastat_create_tables_common.sql
+++ b/sql/create_tables/oastat_create_tables_common.sql
@@ -54,6 +54,14 @@ CREATE TABLE oastat_games (
COMMENT ON TABLE oastat_games IS 'Has the information common for an entire match/map'; -- RESTRICT2POSTGRESQL
+CREATE TABLE oastat_games_ignore (
+ time DATETIME NOT NULL,
+ servername character varying(64) DEFAULT 'noname' NOT NULL
+);
+
+ALTER TABLE oastat_games_ignore
+ ADD CONSTRAINT oastat_games_ignore_check UNIQUE (time, servername);
+
CREATE TABLE oastat_gamecvars (
gamenumber bigint unsigned NOT NULL, -- will be used as primary key later
cvar character varying(100) NOT NULL, -- will be used as primary key later
diff --git a/src/db/Db2CppDb.cpp b/src/db/Db2CppDb.cpp
index 93578bb..0bdfb0f 100644
--- a/src/db/Db2CppDb.cpp
+++ b/src/db/Db2CppDb.cpp
@@ -48,12 +48,21 @@ void Db2CppDb::ReadConfigFromDb()
}
}
+void Db2CppDb::IgnoreGame(const std::string &servername,const tm &thetime)
+{
+ *sql << "INSERT INTO oastat_games_ignore(time,servername) VALUES (?,?)"<<thetime<<servername<<cppdb::exec;
+}
+
bool Db2CppDb::IsDuplicate(const std::string &servername,const tm &thetime)
{
cppdb::result res = *sql << "SELECT 'X' FROM oastat_games WHERE servername = ? AND time = ?"<<servername<<thetime;
if (res.next()) {
return true;
} else {
+ res = *sql << "SELECT 'X' FROM oastat_games_ignore WHERE servername = ? AND time = ?"<<servername<<thetime;
+ if (res.next()) {
+ return true;
+ }
return false;
}
}
@@ -137,6 +146,7 @@ void Db2CppDb::startGame(int gametype, const std::string &mapname, const std::st
std::cout << "No timestamp: "<< servername << "\n";
return;
}
+ this->servername = servername;
if (last_value) {
cppdb::statement st = *sql << "INSERT INTO oastat_games(gametype, mapname, basegame,servername,time) VALUES (?,LOWER(?),?,?,?)"; //<<gametype<<mapname<<basegame<<servername<<timestamp<<exec;
st.bind(gametype);
@@ -189,6 +199,12 @@ void Db2CppDb::endGame(int second)
}
if (!isok) {
Rollback();
+ // Insert into duplicate table here
+ if (!IsDuplicate(servername,timestamp)) {
+ SetOk(true);
+ IgnoreGame(servername, timestamp);
+ Commit();
+ }
return;
}
*sql << "UPDATE oastat_games SET second=? WHERE gamenumber = ?" << second << gamenumber << cppdb::exec;
diff --git a/src/db/Db2CppDb.hpp b/src/db/Db2CppDb.hpp
index a3eec4f..36682c9 100644
--- a/src/db/Db2CppDb.hpp
+++ b/src/db/Db2CppDb.hpp
@@ -65,6 +65,7 @@ private:
bool debug = false;
int gamenumber = 0; /** Gamenumber we are currently working on */
tm timestamp = {}; /** Start time of the game we are currently working on */
+ std::string servername; /** Servername of the server we are currently working on */
int getNextGameNumber();
int getLastGameNumber();
void Commit();
@@ -75,6 +76,7 @@ private:
void InitStrings(const std::string &backend);
void ReadConfigFromDb();
bool IsDuplicate(const std::string &servername, const tm &thetime);
+ void IgnoreGame(const std::string &servername, const tm &thetime);
int getPlayerId(const std::string &guid);
std::map<std::string,int> playerids;
std::string sql_backend;