diff options
| author | 2010-08-27 22:12:25 -0400 | |
|---|---|---|
| committer | 2010-08-27 22:43:59 -0400 | |
| commit | 60a649d4c71dfd02db589f95ed4b04b3b40641b1 (patch) | |
| tree | 4e2a200ee4be50fdef590f7ebfec5316313251af /src/modules/extra/m_sqlite3.cpp | |
| parent | Promote PopulateInfoMap to core, it is moderately useful (diff) | |
| download | inspircd++-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.cpp | 39 |
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); } }; |
