From 60a649d4c71dfd02db589f95ed4b04b3b40641b1 Mon Sep 17 00:00:00 2001 From: Daniel De Graaf Date: Fri, 27 Aug 2010 22:12:25 -0400 Subject: Add FormatSubstitute utility class --- src/modules/extra/m_sqlite3.cpp | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) (limited to 'src/modules/extra/m_sqlite3.cpp') 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); } }; -- cgit v1.3.1-10-gc9f91