mirror of
https://github.com/anope/anope.git
synced 2026-07-03 08:53:12 +02:00
Modified the SQL API to allow unescaped parameters (useful for passing row names and NULL values)
This commit is contained in:
@@ -423,8 +423,8 @@ Anope::string MySQLService::BuildQuery(const SQLQuery &q)
|
||||
{
|
||||
Anope::string real_query = q.query;
|
||||
|
||||
for (std::map<Anope::string, Anope::string>::const_iterator it = q.parameters.begin(), it_end = q.parameters.end(); it != it_end; ++it)
|
||||
real_query = real_query.replace_all_cs("@" + it->first + "@", "'" + this->Escape(it->second) + "'");
|
||||
for (std::map<Anope::string, QueryData>::const_iterator it = q.parameters.begin(), it_end = q.parameters.end(); it != it_end; ++it)
|
||||
real_query = real_query.replace_all_cs("@" + it->first + "@", (it->second.escape ? ("'" + this->Escape(it->second.data) + "'") : it->second.data));
|
||||
|
||||
return real_query;
|
||||
}
|
||||
|
||||
+11
-3
@@ -11,10 +11,17 @@ class SQLException : public ModuleException
|
||||
|
||||
/** A SQL query
|
||||
*/
|
||||
|
||||
struct QueryData
|
||||
{
|
||||
Anope::string data;
|
||||
bool escape;
|
||||
};
|
||||
|
||||
struct SQLQuery
|
||||
{
|
||||
Anope::string query;
|
||||
std::map<Anope::string, Anope::string> parameters;
|
||||
std::map<Anope::string, QueryData> parameters;
|
||||
|
||||
SQLQuery() { }
|
||||
SQLQuery(const Anope::string &q) : query(q) { }
|
||||
@@ -36,12 +43,13 @@ struct SQLQuery
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
template<typename T> void setValue(const Anope::string &key, const T& value)
|
||||
template<typename T> void setValue(const Anope::string &key, const T& value, bool escape = true)
|
||||
{
|
||||
try
|
||||
{
|
||||
Anope::string string_value = stringify(value);
|
||||
this->parameters[key] = string_value;
|
||||
this->parameters[key].data = string_value;
|
||||
this->parameters[key].escape = escape;
|
||||
}
|
||||
catch (const ConvertException &ex) { }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user