mirror of
https://github.com/EQEmu/Server.git
synced 2026-04-08 10:02:26 +00:00
Merge pull request #188 from addtheice/RunQueryToDatabaseQuery_rulesys
Run query to database query rulesys
This commit is contained in:
commit
1b6ccca709
@ -266,10 +266,6 @@ void RuleManager::SaveRules(Database *db, const char *ruleset) {
|
|||||||
|
|
||||||
|
|
||||||
bool RuleManager::LoadRules(Database *db, const char *ruleset) {
|
bool RuleManager::LoadRules(Database *db, const char *ruleset) {
|
||||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
|
||||||
char *query = 0;
|
|
||||||
MYSQL_RES *result;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
|
|
||||||
int rsid = GetRulesetID(db, ruleset);
|
int rsid = GetRulesetID(db, ruleset);
|
||||||
if(rsid < 0) {
|
if(rsid < 0) {
|
||||||
@ -282,24 +278,19 @@ bool RuleManager::LoadRules(Database *db, const char *ruleset) {
|
|||||||
m_activeRuleset = rsid;
|
m_activeRuleset = rsid;
|
||||||
m_activeName = ruleset;
|
m_activeName = ruleset;
|
||||||
|
|
||||||
if (db->RunQuery(query, MakeAnyLenString(&query,
|
std::string query = StringFormat("SELECT rule_name, rule_value FROM rule_values WHERE ruleset_id=%d", rsid);
|
||||||
"SELECT rule_name, rule_value"
|
auto results = db->QueryDatabase(query);
|
||||||
" FROM rule_values"
|
if (!results.Success())
|
||||||
" WHERE ruleset_id=%d", rsid), errbuf, &result))
|
|
||||||
{
|
{
|
||||||
safe_delete_array(query);
|
LogFile->write(EQEMuLog::Error, "Error in LoadRules query %s: %s", query.c_str(), results.ErrorMessage().c_str());
|
||||||
while((row = mysql_fetch_row(result))) {
|
return false;
|
||||||
if(!SetRule(row[0], row[1], nullptr, false))
|
|
||||||
_log(RULES__ERROR, "Unable to interpret rule record for %s", row[0]);
|
|
||||||
}
|
|
||||||
mysql_free_result(result);
|
|
||||||
} else {
|
|
||||||
safe_delete_array(query);
|
|
||||||
LogFile->write(EQEMuLog::Error, "Error in LoadRules query %s: %s", query, errbuf);
|
|
||||||
return(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return(true);
|
for(auto row = results.begin(); row != results.end(); ++row)
|
||||||
|
if(!SetRule(row[0], row[1], nullptr, false))
|
||||||
|
_log(RULES__ERROR, "Unable to interpret rule record for %s", row[0]);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RuleManager::_SaveRule(Database *db, RuleType type, uint16 index) {
|
void RuleManager::_SaveRule(Database *db, RuleType type, uint16 index) {
|
||||||
@ -317,127 +308,96 @@ void RuleManager::_SaveRule(Database *db, RuleType type, uint16 index) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
std::string query = StringFormat("REPLACE INTO rule_values "
|
||||||
char* query = 0;
|
"(ruleset_id, rule_name, rule_value) "
|
||||||
if (!db->RunQuery(query, MakeAnyLenString(&query,
|
|
||||||
"REPLACE INTO rule_values (ruleset_id, rule_name, rule_value) "
|
|
||||||
" VALUES(%d, '%s', '%s')",
|
" VALUES(%d, '%s', '%s')",
|
||||||
m_activeRuleset, _GetRuleName(type, index), vstr),errbuf))
|
m_activeRuleset, _GetRuleName(type, index), vstr);
|
||||||
{
|
auto results = db->QueryDatabase(query);
|
||||||
_log(RULES__ERROR, "Fauled to set rule in the database: %s: %s", query,errbuf);
|
if (!results.Success())
|
||||||
}
|
_log(RULES__ERROR, "Fauled to set rule in the database: %s: %s", query.c_str(), results.ErrorMessage().c_str());
|
||||||
safe_delete_array(query);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int RuleManager::GetRulesetID(Database *db, const char *rulesetname) {
|
int RuleManager::GetRulesetID(Database *db, const char *rulesetname) {
|
||||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
|
||||||
char *query = 0;
|
|
||||||
MYSQL_RES *result;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
|
|
||||||
uint32 len = strlen(rulesetname);
|
uint32 len = strlen(rulesetname);
|
||||||
char* rst = new char[2*len+1];
|
char* rst = new char[2*len+1];
|
||||||
db->DoEscapeString(rst, rulesetname, len);
|
db->DoEscapeString(rst, rulesetname, len);
|
||||||
|
|
||||||
int res = -1;
|
std::string query = StringFormat("SELECT ruleset_id FROM rule_sets WHERE name='%s'", rst);
|
||||||
|
|
||||||
if (db->RunQuery(query, MakeAnyLenString(&query,
|
|
||||||
"SELECT ruleset_id"
|
|
||||||
" FROM rule_sets"
|
|
||||||
" WHERE name='%s'", rst), errbuf, &result))
|
|
||||||
{
|
|
||||||
if((row = mysql_fetch_row(result))) {
|
|
||||||
res = atoi(row[0]);
|
|
||||||
}
|
|
||||||
mysql_free_result(result);
|
|
||||||
} else {
|
|
||||||
LogFile->write(EQEMuLog::Error, "Error in LoadRules query %s: %s", query, errbuf);
|
|
||||||
}
|
|
||||||
safe_delete_array(query);
|
|
||||||
safe_delete_array(rst);
|
safe_delete_array(rst);
|
||||||
|
auto results = db->QueryDatabase(query);
|
||||||
|
if (!results.Success()) {
|
||||||
|
LogFile->write(EQEMuLog::Error, "Error in LoadRules query %s: %s", query.c_str(), results.ErrorMessage().c_str());
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
return(res);
|
if (results.RowCount() == 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
auto row = results.begin();
|
||||||
|
|
||||||
|
return atoi(row[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
int RuleManager::_FindOrCreateRuleset(Database *db, const char *ruleset) {
|
int RuleManager::_FindOrCreateRuleset(Database *db, const char *ruleset) {
|
||||||
int res;
|
|
||||||
|
|
||||||
res = GetRulesetID(db, ruleset);
|
int res = GetRulesetID(db, ruleset);
|
||||||
if(res >= 0)
|
if(res >= 0)
|
||||||
return(res); //found and existing one...
|
return res; //found and existing one...
|
||||||
|
|
||||||
uint32 len = strlen(ruleset);
|
uint32 len = strlen(ruleset);
|
||||||
char* rst = new char[2*len+1];
|
char* rst = new char[2*len+1];
|
||||||
db->DoEscapeString(rst, ruleset, len);
|
db->DoEscapeString(rst, ruleset, len);
|
||||||
|
|
||||||
uint32 new_id;
|
std::string query = StringFormat("INSERT INTO rule_sets (ruleset_id, name) VALUES(0, '%s')", rst);
|
||||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
safe_delete_array(rst);
|
||||||
char* query = 0;
|
auto results = db->QueryDatabase(query);
|
||||||
if (!db->RunQuery(query, MakeAnyLenString(&query,
|
if (!results.Success())
|
||||||
"INSERT INTO rule_sets (ruleset_id, name) "
|
|
||||||
" VALUES(0, '%s')",
|
|
||||||
rst),errbuf,nullptr,nullptr,&new_id))
|
|
||||||
{
|
{
|
||||||
_log(RULES__ERROR, "Fauled to create rule set in the database: %s: %s", query,errbuf);
|
_log(RULES__ERROR, "Fauled to create rule set in the database: %s: %s", query.c_str(), results.ErrorMessage().c_str());
|
||||||
res = -1;
|
return -1;
|
||||||
} else {
|
|
||||||
res = new_id;
|
|
||||||
}
|
}
|
||||||
safe_delete_array(query);
|
|
||||||
|
|
||||||
return(res);
|
return results.LastInsertedID();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string RuleManager::GetRulesetName(Database *db, int id) {
|
std::string RuleManager::GetRulesetName(Database *db, int id) {
|
||||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
|
||||||
char *query = 0;
|
|
||||||
MYSQL_RES *result;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
|
|
||||||
std::string res;
|
std::string query = StringFormat("SELECT name FROM rule_sets WHERE ruleset_id=%d", id);
|
||||||
|
auto results = db->QueryDatabase(query);
|
||||||
if (db->RunQuery(query, MakeAnyLenString(&query,
|
if (!results.Success())
|
||||||
"SELECT name"
|
|
||||||
" FROM rule_sets"
|
|
||||||
" WHERE ruleset_id=%d", id), errbuf, &result))
|
|
||||||
{
|
{
|
||||||
if((row = mysql_fetch_row(result))) {
|
LogFile->write(EQEMuLog::Error, "Error in LoadRules query %s: %s", query.c_str(), results.ErrorMessage().c_str());
|
||||||
res = row[0];
|
return "";
|
||||||
}
|
}
|
||||||
mysql_free_result(result);
|
|
||||||
} else {
|
|
||||||
LogFile->write(EQEMuLog::Error, "Error in LoadRules query %s: %s", query, errbuf);
|
|
||||||
}
|
|
||||||
safe_delete_array(query);
|
|
||||||
|
|
||||||
return(res);
|
if (results.RowCount() == 0)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
auto row = results.begin();
|
||||||
|
|
||||||
|
return row[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RuleManager::ListRulesets(Database *db, std::map<int, std::string> &into) {
|
bool RuleManager::ListRulesets(Database *db, std::map<int, std::string> &into) {
|
||||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
|
||||||
char *query = 0;
|
|
||||||
MYSQL_RES *result;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
|
|
||||||
//start out with the default set which is always present.
|
//start out with the default set which is always present.
|
||||||
into[0] = "default";
|
into[0] = "default";
|
||||||
|
|
||||||
if (db->RunQuery(query, MakeAnyLenString(&query,
|
std::string query = "SELECT ruleset_id, name FROM rule_sets";
|
||||||
"SELECT ruleset_id,name"
|
auto results = db->QueryDatabase(query);
|
||||||
" FROM rule_sets"), errbuf, &result))
|
if (results.Success())
|
||||||
{
|
{
|
||||||
while((row = mysql_fetch_row(result))) {
|
LogFile->write(EQEMuLog::Error, "Error in ListRulesets query %s: %s", query.c_str(), results.ErrorMessage().c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto row = results.begin(); row != results.end(); ++row)
|
||||||
into[ atoi(row[0]) ] = row[1];
|
into[ atoi(row[0]) ] = row[1];
|
||||||
}
|
|
||||||
mysql_free_result(result);
|
return true;
|
||||||
safe_delete_array(query);
|
|
||||||
} else {
|
|
||||||
LogFile->write(EQEMuLog::Error, "Error in ListRulesets query %s: %s", query, errbuf);
|
|
||||||
safe_delete_array(query);
|
|
||||||
return(false);
|
|
||||||
}
|
|
||||||
return(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 RuleManager::GetIntRule(RuleManager::IntType t) const
|
int32 RuleManager::GetIntRule(RuleManager::IntType t) const
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user