X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fextra%2Fm_sqlite3.cpp;h=1e3a65a18fdea27e4483daff11f05fd366534116;hb=64faca29b377185c4615c8f2e4eecedc7ad045d1;hp=b13d42bcabb0d517302c54d6f7122fe77471da63;hpb=e9808ffb01876ab0ebad383de7861899a17f1a63;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/extra/m_sqlite3.cpp b/src/modules/extra/m_sqlite3.cpp index b13d42bca..1e3a65a18 100644 --- a/src/modules/extra/m_sqlite3.cpp +++ b/src/modules/extra/m_sqlite3.cpp @@ -1,20 +1,33 @@ -/* +------------------------------------+ - * | Inspire Internet Relay Chat Daemon | - * +------------------------------------+ +/* + * InspIRCd -- Internet Relay Chat Daemon * - * InspIRCd: (C) 2002-2010 InspIRCd Development Team - * See: http://wiki.inspircd.org/Credits + * Copyright (C) 2009-2010 Daniel De Graaf + * Copyright (C) 2007-2009 Dennis Friis + * Copyright (C) 2007, 2009 Craig Edwards + * Copyright (C) 2008 Pippijn van Steenhoven * - * This program is free but copyrighted software; see - * the file COPYING for details. + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. * - * --------------------------------------------------- + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + #include "inspircd.h" #include #include "sql.h" +#ifdef _WIN32 +# pragma comment(lib, "sqlite3.lib") +#endif + /* $ModDesc: sqlite3 provider */ /* $CompileFlags: pkgconfversion("sqlite3","3.3") pkgconfincludes("sqlite3","/sqlite3.h","") */ /* $LinkerFlags: pkgconflibs("sqlite3","/libsqlite3.so","-lsqlite3") */ @@ -84,15 +97,18 @@ class SQLConn : public SQLProvider ~SQLConn() { - sqlite3_interrupt(conn); - sqlite3_close(conn); + if (conn) + { + sqlite3_interrupt(conn); + sqlite3_close(conn); + } } - void Query(SQLQuery* query) + void Query(SQLQuery* query, const std::string& q) { SQLite3Result res; sqlite3_stmt *stmt; - int err = sqlite3_prepare_v2(conn, query->query.c_str(), query->query.length(), &stmt, NULL); + int err = sqlite3_prepare_v2(conn, q.c_str(), q.length(), &stmt, NULL); if (err != SQLITE_OK) { SQLerror error(SQL_QSEND_FAIL, sqlite3_errmsg(conn)); @@ -136,7 +152,13 @@ class SQLConn : public SQLProvider sqlite3_finalize(stmt); } - std::string FormatQuery(const std::string& q, const ParamL& p) + virtual void submit(SQLQuery* query, const std::string& q) + { + Query(query, q); + delete query; + } + + virtual void submit(SQLQuery* query, const std::string& q, const ParamL& p) { std::string res; unsigned int param = 0; @@ -146,7 +168,6 @@ class SQLConn : public SQLProvider res.push_back(q[i]); else { - // TODO numbered parameter support ('?1') if (param < p.size()) { char* escaped = sqlite3_mprintf("%q", p[param++].c_str()); @@ -155,10 +176,10 @@ class SQLConn : public SQLProvider } } } - return res; + submit(query, res); } - std::string FormatQuery(const std::string& q, const ParamM& p) + virtual void submit(SQLQuery* query, const std::string& q, const ParamM& p) { std::string res; for(std::string::size_type i = 0; i < q.length(); i++) @@ -169,7 +190,7 @@ class SQLConn : public SQLProvider { std::string field; i++; - while (i < q.length() && isalpha(q[i])) + while (i < q.length() && isalnum(q[i])) field.push_back(q[i++]); i--; @@ -182,13 +203,7 @@ class SQLConn : public SQLProvider } } } - return res; - } - - virtual void submit(SQLQuery* query) - { - Query(query); - delete query; + submit(query, res); } }; @@ -207,7 +222,7 @@ class ModuleSQLite3 : public Module ReadConf(); Implementation eventlist[] = { I_OnRehash }; - ServerInstance->Modules->Attach(eventlist, this, 1); + ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation)); } virtual ~ModuleSQLite3()