aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/extra/m_sqlite3.cpp
diff options
context:
space:
mode:
authorGravatar Daniel De Graaf2010-08-27 22:12:25 -0400
committerGravatar Daniel De Graaf2010-08-27 22:43:59 -0400
commit60a649d4c71dfd02db589f95ed4b04b3b40641b1 (patch)
tree4e2a200ee4be50fdef590f7ebfec5316313251af /src/modules/extra/m_sqlite3.cpp
parentPromote PopulateInfoMap to core, it is moderately useful (diff)
downloadinspircd++-60a649d4c71dfd02db589f95ed4b04b3b40641b1.tar.gz
inspircd++-60a649d4c71dfd02db589f95ed4b04b3b40641b1.tar.bz2
inspircd++-60a649d4c71dfd02db589f95ed4b04b3b40641b1.zip
Add FormatSubstitute utility class
Diffstat (limited to 'src/modules/extra/m_sqlite3.cpp')
-rw-r--r--src/modules/extra/m_sqlite3.cpp39
1 files changed, 18 insertions, 21 deletions
diff --git a/src/modules/extra/m_sqlite3.cpp b/src/modules/extra/m_sqlite3.cpp
index d38991ef8..d4192970f 100644
--- a/src/modules/extra/m_sqlite3.cpp
+++ b/src/modules/extra/m_sqlite3.cpp
@@ -163,30 +163,27 @@ class SQLConn : public SQLProvider
submit(query, res);
}
- virtual void submit(SQLQuery* query, const std::string& q, const ParamM& p)
+ class SQLFormat : public FormatSubstitute
{
- std::string res;
- for(std::string::size_type i = 0; i < q.length(); i++)
+ public:
+ const ParamM& map;
+ SQLFormat(const ParamM& Map) : map(Map) {}
+ std::string lookup(const std::string& key)
{
- if (q[i] != '$')
- res.push_back(q[i]);
- else
- {
- std::string field;
- i++;
- while (i < q.length() && isalnum(q[i]))
- field.push_back(q[i++]);
- i--;
-
- ParamM::const_iterator it = p.find(field);
- if (it != p.end())
- {
- char* escaped = sqlite3_mprintf("%q", it->second.c_str());
- res.append(escaped);
- sqlite3_free(escaped);
- }
- }
+ ParamM::const_iterator it = map.find(key);
+ if (it == map.end())
+ return "";
+ char* escaped = sqlite3_mprintf("%q", it->second.c_str());
+ std::string rv(escaped);
+ sqlite3_free(escaped);
+ return rv;
}
+ };
+
+ virtual void submit(SQLQuery* query, const std::string& q, const ParamM& p)
+ {
+ SQLFormat subst(p);
+ std::string res = subst.format(q);
submit(query, res);
}
};