RefreshGuild converted to QueryDatabase

This commit is contained in:
Arthur Ice 2014-08-17 10:59:24 -07:00
parent 22367622be
commit a91b6a0db8

View File

@ -112,46 +112,48 @@ bool BaseGuildManager::RefreshGuild(uint32 guild_id) {
return(false); return(false);
} }
char errbuf[MYSQL_ERRMSG_SIZE]; std::string query = StringFormat("SELECT name, leader, minstatus, motd, motd_setter, channel,url FROM guilds WHERE id=%lu", (unsigned long)guild_id);
char *query = 0;
MYSQL_RES *result;
MYSQL_ROW row;
std::map<uint32, GuildInfo *>::iterator res; std::map<uint32, GuildInfo *>::iterator res;
GuildInfo *info; GuildInfo *info;
// load up all the guilds // load up all the guilds
if (!m_db->RunQuery(query, MakeAnyLenString(&query, auto results = m_db->QueryDatabase(query);
"SELECT name, leader, minstatus, motd, motd_setter, channel,url FROM guilds WHERE id=%lu", (unsigned long)guild_id), errbuf, &result)) {
_log(GUILDS__ERROR, "Error reloading guilds '%s': %s", query, errbuf); if (!results.Success())
safe_delete_array(query); {
return(false); _log(GUILDS__ERROR, "Error reloading guilds '%s': %s", query.c_str(), results.ErrorMessage().c_str());
return false;
} }
safe_delete_array(query);
if ((row = mysql_fetch_row(result))) { if (results.RowCount() == 0)
//delete the old entry and create the new one. {
info = _CreateGuild(guild_id, row[0], atoi(row[1]), atoi(row[2]), row[3], row[4], row[5], row[6]);
} else {
_log(GUILDS__ERROR, "Unable to find guild %d in the database.", guild_id); _log(GUILDS__ERROR, "Unable to find guild %d in the database.", guild_id);
return(false); return false;
} }
mysql_free_result(result);
//load up the rank info for each guild. auto row = results.begin();
if (!m_db->RunQuery(query, MakeAnyLenString(&query,
"SELECT guild_id,rank,title,can_hear,can_speak,can_invite,can_remove,can_promote,can_demote,can_motd,can_warpeace " info = _CreateGuild(guild_id, row[0], atoi(row[1]), atoi(row[2]), row[3], row[4], row[5], row[6]);
"FROM guild_ranks WHERE guild_id=%lu", (unsigned long)guild_id), errbuf, &result)) {
_log(GUILDS__ERROR, "Error reloading guild ranks '%s': %s", query, errbuf); query = StringFormat("SELECT guild_id, rank, title, can_hear, can_speak, can_invite, can_remove, can_promote, can_demote, can_motd, can_warpeace "
safe_delete_array(query); "FROM guild_ranks WHERE guild_id=%lu", (unsigned long)guild_id);
return(false); results = m_db->QueryDatabase(query);
if (!results.Success())
{
_log(GUILDS__ERROR, "Error reloading guild ranks '%s': %s", query.c_str(), results.ErrorMessage().c_str());
return false;
} }
safe_delete_array(query);
while((row = mysql_fetch_row(result))) { for (auto row=results.begin();row!=results.end();++row)
{
uint8 rankn = atoi(row[1]); uint8 rankn = atoi(row[1]);
if(rankn > GUILD_MAX_RANK) { if(rankn > GUILD_MAX_RANK) {
_log(GUILDS__ERROR, "Found invalid (too high) rank %d for guild %d, skipping.", rankn, guild_id); _log(GUILDS__ERROR, "Found invalid (too high) rank %d for guild %d, skipping.", rankn, guild_id);
continue; continue;
} }
RankInfo &rank = info->ranks[rankn]; RankInfo &rank = info->ranks[rankn];
rank.name = row[2]; rank.name = row[2];
@ -164,11 +166,10 @@ bool BaseGuildManager::RefreshGuild(uint32 guild_id) {
rank.permissions[GUILD_MOTD] = (row[9][0] == '1') ? true: false; rank.permissions[GUILD_MOTD] = (row[9][0] == '1') ? true: false;
rank.permissions[GUILD_WARPEACE] = (row[10][0] == '1') ? true: false; rank.permissions[GUILD_WARPEACE] = (row[10][0] == '1') ? true: false;
} }
mysql_free_result(result);
_log(GUILDS__DB, "Successfully refreshed guild %d from the database.", guild_id); _log(GUILDS__DB, "Successfully refreshed guild %d from the database.", guild_id);
return(true); return true;
} }
BaseGuildManager::GuildInfo *BaseGuildManager::_CreateGuild(uint32 guild_id, const char *guild_name, uint32 leader_char_id, uint8 minstatus, const char *guild_motd, const char *motd_setter, const char *Channel, const char *URL) BaseGuildManager::GuildInfo *BaseGuildManager::_CreateGuild(uint32 guild_id, const char *guild_name, uint32 leader_char_id, uint8 minstatus, const char *guild_motd, const char *motd_setter, const char *Channel, const char *URL)