diff options
author | Adam <Adam@anope.org> | 2012-01-15 01:47:31 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2012-01-15 01:47:31 -0500 |
commit | 964d63cdacdbc3769b269ae0e6e616f58f0256bc (patch) | |
tree | 7398a51b5bc15e054fb6640b226b26c1e2793eda /modules | |
parent | f38faedbdad404983c0d291b8e0e233a6b0fb70d (diff) |
Improve on db_sql_live_read
Diffstat (limited to 'modules')
-rw-r--r-- | modules/database/db_sql.cpp | 2 | ||||
-rw-r--r-- | modules/database/db_sql_live_read.cpp | 172 | ||||
-rw-r--r-- | modules/database/db_sql_live_write.cpp | 10 |
3 files changed, 60 insertions, 124 deletions
diff --git a/modules/database/db_sql.cpp b/modules/database/db_sql.cpp index 40b24b0aa..c32c12e2e 100644 --- a/modules/database/db_sql.cpp +++ b/modules/database/db_sql.cpp @@ -183,7 +183,7 @@ class DBSQL : public Module } } - return EVENT_CONTINUE; + return EVENT_STOP; } }; diff --git a/modules/database/db_sql_live_read.cpp b/modules/database/db_sql_live_read.cpp index ac7a0191c..90a36d10a 100644 --- a/modules/database/db_sql_live_read.cpp +++ b/modules/database/db_sql_live_read.cpp @@ -32,124 +32,6 @@ class SQLCache : public Timer } }; -static void ChanInfoUpdate(const Anope::string &name, const SQLResult &res) -{ - ChannelInfo *ci = cs_findchan(name); - if (res.Rows() == 0) - { - delete ci; - return; - } - - try - { - if (!ci) - ci = new ChannelInfo(name); - ci->SetFounder(findcore(res.Get(0, "founder"))); - ci->successor = findcore(res.Get(0, "successor")); - ci->desc = res.Get(0, "description"); - ci->time_registered = convertTo<time_t>(res.Get(0, "time_registered")); - ci->ClearFlags(); - ci->FromString(res.Get(0, "flags")); - ci->bantype = convertTo<int>(res.Get(0, "bantype")); - ci->memos.memomax = convertTo<unsigned>(res.Get(0, "memomax")); - - if (res.Get(0, "bi").equals_cs(ci->bi ? ci->bi->nick : "") == false) - { - if (ci->bi) - ci->bi->UnAssign(NULL, ci); - BotInfo *bi = findbot(res.Get(0, "bi")); - if (bi) - bi->Assign(NULL, ci); - } - - ci->capsmin = convertTo<int16_t>(res.Get(0, "capsmin")); - ci->capspercent = convertTo<int16_t>(res.Get(0, "capspercent")); - ci->floodlines = convertTo<int16_t>(res.Get(0, "floodlines")); - ci->floodsecs = convertTo<int16_t>(res.Get(0, "floodsecs")); - ci->repeattimes = convertTo<int16_t>(res.Get(0, "repeattimes")); - - if (ci->c) - check_modes(ci->c); - } - catch (const SQLException &ex) - { - Log() << ex.GetReason(); - } - catch (const ConvertException &) { } -} - -static void NickInfoUpdate(const Anope::string &name, const SQLResult &res) -{ - NickAlias *na = findnick(name); - if (res.Rows() == 0) - { - delete na; - return; - } - - try - { - NickCore *nc = findcore(res.Get(0, "nick")); - if (!nc) - return; - if (!na) - na = new NickAlias(name, nc); - - na->last_quit = res.Get(0, "last_quit"); - na->last_realname = res.Get(0, "last_realname"); - na->last_usermask = res.Get(0, "last_usermask"); - na->last_realhost = res.Get(0, "last_realhost"); - na->time_registered = convertTo<time_t>(res.Get(0, "time_registered")); - na->last_seen = convertTo<time_t>(res.Get(0, "last_seen")); - na->ClearFlags(); - na->FromString(res.Get(0, "flags")); - - if (na->nc != nc) - { - std::list<NickAlias *>::iterator it = std::find(na->nc->aliases.begin(), na->nc->aliases.end(), na); - if (it != na->nc->aliases.end()) - na->nc->aliases.erase(it); - - na->nc = nc; - na->nc->aliases.push_back(na); - } - } - catch (const SQLException &ex) - { - Log() << ex.GetReason(); - } - catch (const ConvertException &) { } -} - -static void NickCoreUpdate(const Anope::string &name, const SQLResult &res) -{ - NickCore *nc = findcore(name); - if (res.Rows() == 0) - { - delete nc; - return; - } - - try - { - if (!nc) - nc = new NickCore(name); - - nc->pass = res.Get(0, "pass"); - nc->email = res.Get(0, "email"); - nc->greet = res.Get(0, "greet"); - nc->ClearFlags(); - nc->FromString(res.Get(0, "flags")); - nc->language = res.Get(0, "language"); - } - catch (const SQLException &ex) - { - Log() << ex.GetReason(); - } - catch (const ConvertException &) { } -} - class MySQLLiveModule : public Module { service_reference<SQLProvider, Base> SQL; @@ -201,7 +83,23 @@ class MySQLLiveModule : public Module SQLQuery query("SELECT * FROM `ChannelInfo` WHERE `name` = @name@"); query.setValue("name", chname); SQLResult res = this->RunQuery(query); - ChanInfoUpdate(chname, res); + + if (res.Rows() == 0) + { + delete cs_findchan(chname); + return; + } + + SerializeType *sb = SerializeType::Find("ChannelInfo"); + if (sb == NULL) + return; + + Serializable::serialized_data data; + const std::map<Anope::string, Anope::string> &row = res.Row(0); + for (std::map<Anope::string, Anope::string>::const_iterator rit = row.begin(), rit_end = row.end(); rit != rit_end; ++rit) + data[rit->first] << rit->second; + + sb->Create(data); } catch (const SQLException &ex) { @@ -219,7 +117,23 @@ class MySQLLiveModule : public Module SQLQuery query("SELECT * FROM `NickAlias` WHERE `nick` = @nick@"); query.setValue("nick", nick); SQLResult res = this->RunQuery(query); - NickInfoUpdate(nick, res); + + if (res.Rows() == 0) + { + delete findnick(nick); + return; + } + + SerializeType *sb = SerializeType::Find("NickAlias"); + if (sb == NULL) + return; + + Serializable::serialized_data data; + const std::map<Anope::string, Anope::string> &row = res.Row(0); + for (std::map<Anope::string, Anope::string>::const_iterator rit = row.begin(), rit_end = row.end(); rit != rit_end; ++rit) + data[rit->first] << rit->second; + + sb->Create(data); } catch (const SQLException &ex) { @@ -237,7 +151,23 @@ class MySQLLiveModule : public Module SQLQuery query("SELECT * FROM `NickCore` WHERE `display` = @display@"); query.setValue("display", nick); SQLResult res = this->RunQuery(query); - NickCoreUpdate(nick, res); + + if (res.Rows() == 0) + { + delete findcore(nick); + return; + } + + SerializeType *sb = SerializeType::Find("NickCore"); + if (sb == NULL) + return; + + Serializable::serialized_data data; + const std::map<Anope::string, Anope::string> &row = res.Row(0); + for (std::map<Anope::string, Anope::string>::const_iterator rit = row.begin(), rit_end = row.end(); rit != rit_end; ++rit) + data[rit->first] << rit->second; + + sb->Create(data); } catch (const SQLException &ex) { diff --git a/modules/database/db_sql_live_write.cpp b/modules/database/db_sql_live_write.cpp index 6bb9b93d5..a97f57359 100644 --- a/modules/database/db_sql_live_write.cpp +++ b/modules/database/db_sql_live_write.cpp @@ -85,9 +85,15 @@ class DBMySQL : public Module void Delete(const Anope::string &table, const Serializable::serialized_data &data) { - Anope::string query_text = "DELETE FROM `" + table + "` WHERE "; + Anope::string query_text = "DELETE FROM `" + table + "` WHERE ", arg_text; for (Serializable::serialized_data::const_iterator it = data.begin(), it_end = data.end(); it != it_end; ++it) - query_text += "`" + it->first + "` = @" + it->first + "@"; + { + if (!arg_text.empty()) + arg_text += " AND "; + arg_text += "`" + it->first + "` = @" + it->first + "@"; + } + + query_text += arg_text; SQLQuery query(query_text); for (Serializable::serialized_data::const_iterator it = data.begin(), it_end = data.end(); it != it_end; ++it) |