diff --git a/modules/database/db_sql.cpp b/modules/database/db_sql.cpp index a9bcdf0e8..170f7a5c8 100644 --- a/modules/database/db_sql.cpp +++ b/modules/database/db_sql.cpp @@ -59,7 +59,7 @@ class DBSQL : public Module, public Pipe ServiceReference sql; SQLSQLInterface sqlinterface; Anope::string prefix; - std::set > updated_items; + std::set updated_items; bool shutting_down; bool loading_databases; bool loaded; @@ -98,11 +98,11 @@ class DBSQL : public Module, public Pipe void OnNotify() anope_override { - for (std::set >::iterator it = this->updated_items.begin(), it_end = this->updated_items.end(); it != it_end; ++it) + for (std::set::iterator it = this->updated_items.begin(), it_end = this->updated_items.end(); it != it_end; ++it) { - Reference obj = *it; + Serializable *obj = *it; - if (obj && this->sql) + if (this->sql) { Data *data = new Data(); obj->Serialize(*data); @@ -177,6 +177,7 @@ class DBSQL : public Module, public Pipe { if (this->shutting_down || this->loading_databases) return; + obj->UpdateTS(); this->updated_items.insert(obj); this->Notify(); } @@ -186,6 +187,7 @@ class DBSQL : public Module, public Pipe Serialize::Type *s_type = obj->GetSerializableType(); if (s_type) this->RunBackground("DELETE FROM `" + this->prefix + s_type->GetName() + "` WHERE `id` = " + stringify(obj->id)); + this->updated_items.erase(obj); } void OnSerializableUpdate(Serializable *obj) anope_override diff --git a/modules/database/db_sql_live.cpp b/modules/database/db_sql_live.cpp index aec84c8ef..03de09294 100644 --- a/modules/database/db_sql_live.cpp +++ b/modules/database/db_sql_live.cpp @@ -13,7 +13,7 @@ class DBMySQL : public Module, public Pipe time_t lastwarn; bool ro; bool init; - std::set > updated_items; + std::set updated_items; bool CheckSQL() { @@ -83,9 +83,9 @@ class DBMySQL : public Module, public Pipe if (!this->CheckInit()) return; - for (std::set >::iterator it = this->updated_items.begin(), it_end = this->updated_items.end(); it != it_end; ++it) + for (std::set::iterator it = this->updated_items.begin(), it_end = this->updated_items.end(); it != it_end; ++it) { - Reference obj = *it; + Serializable *obj = *it; if (obj && this->SQL) { @@ -144,6 +144,7 @@ class DBMySQL : public Module, public Pipe { if (!this->CheckInit()) return; + obj->UpdateTS(); this->updated_items.insert(obj); this->Notify(); } @@ -153,10 +154,10 @@ class DBMySQL : public Module, public Pipe if (!this->CheckInit()) return; Serialize::Type *s_type = obj->GetSerializableType(); - if (!s_type) - return; - this->RunQuery("DELETE FROM `" + this->prefix + s_type->GetName() + "` WHERE `id` = " + stringify(obj->id)); + if (s_type) + this->RunQuery("DELETE FROM `" + this->prefix + s_type->GetName() + "` WHERE `id` = " + stringify(obj->id)); s_type->objects.erase(obj->id); + this->updated_items.erase(obj); } void OnSerializeCheck(Serialize::Type *obj) anope_override