X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmodules%2Fextra%2Fm_sqlite3.cpp;h=31821045d39f1261dadf04c95039028b41131bee;hb=780dda83ba3857bc3c330d4b5d38bb251a9d879b;hp=945584df2ab03562f43733dd4da1e1f6df52bd36;hpb=36f93c0e7f8a980943237b0b28138ade86f5e573;p=user%2Fhenk%2Fcode%2Finspircd.git
diff --git a/src/modules/extra/m_sqlite3.cpp b/src/modules/extra/m_sqlite3.cpp
index 945584df2..31821045d 100644
--- a/src/modules/extra/m_sqlite3.cpp
+++ b/src/modules/extra/m_sqlite3.cpp
@@ -19,40 +19,51 @@
* along with this program. If not, see .
*/
+/// $CompilerFlags: find_compiler_flags("sqlite3")
+/// $LinkerFlags: find_linker_flags("sqlite3" "-lsqlite3")
+
+/// $PackageInfo: require_system("centos") pkgconfig sqlite-devel
+/// $PackageInfo: require_system("darwin") pkg-config sqlite3
+/// $PackageInfo: require_system("debian") libsqlite3-dev pkg-config
+/// $PackageInfo: require_system("ubuntu") libsqlite3-dev pkg-config
#include "inspircd.h"
-#include
#include "modules/sql.h"
+// Fix warnings about the use of `long long` on C++03.
+#if defined __clang__
+# pragma clang diagnostic ignored "-Wc++11-long-long"
+#elif defined __GNUC__
+# pragma GCC diagnostic ignored "-Wlong-long"
+#endif
+
+#include
+
#ifdef _WIN32
# pragma comment(lib, "sqlite3.lib")
#endif
-/* $CompileFlags: pkgconfversion("sqlite3","3.3") pkgconfincludes("sqlite3","/sqlite3.h","") */
-/* $LinkerFlags: pkgconflibs("sqlite3","/libsqlite3.so","-lsqlite3") */
-/* $NoPedantic */
-
class SQLConn;
-typedef std::map ConnMap;
+typedef insp::flat_map ConnMap;
-class SQLite3Result : public SQLResult
+class SQLite3Result : public SQL::Result
{
public:
int currentrow;
int rows;
std::vector columns;
- std::vector fieldlists;
+ std::vector fieldlists;
SQLite3Result() : currentrow(0), rows(0)
{
}
- int Rows()
+ int Rows() CXX11_OVERRIDE
{
return rows;
}
- bool GetRow(SQLEntries& result)
+ bool GetRow(SQL::Row& result) CXX11_OVERRIDE
{
if (currentrow < rows)
{
@@ -67,42 +78,60 @@ class SQLite3Result : public SQLResult
}
}
- void GetCols(std::vector& result)
+ void GetCols(std::vector& result) CXX11_OVERRIDE
{
result.assign(columns.begin(), columns.end());
}
+
+ bool HasColumn(const std::string& column, size_t& index)
+ {
+ for (size_t i = 0; i < columns.size(); ++i)
+ {
+ if (columns[i] == column)
+ {
+ index = i;
+ return true;
+ }
+ }
+ return false;
+ }
};
-class SQLConn : public SQLProvider
+class SQLConn : public SQL::Provider
{
sqlite3* conn;
reference config;
public:
- SQLConn(Module* Parent, ConfigTag* tag) : SQLProvider(Parent, "SQL/" + tag->getString("id")), config(tag)
+ SQLConn(Module* Parent, ConfigTag* tag) : SQL::Provider(Parent, "SQL/" + tag->getString("id")), config(tag)
{
std::string host = tag->getString("hostname");
if (sqlite3_open_v2(host.c_str(), &conn, SQLITE_OPEN_READWRITE, 0) != SQLITE_OK)
{
- ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, "WARNING: Could not open DB with id: " + tag->getString("id"));
+ // Even in case of an error conn must be closed
+ sqlite3_close(conn);
conn = NULL;
+ ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, "WARNING: Could not open DB with id: " + tag->getString("id"));
}
}
~SQLConn()
{
- sqlite3_interrupt(conn);
- sqlite3_close(conn);
+ if (conn)
+ {
+ sqlite3_interrupt(conn);
+ sqlite3_close(conn);
+ }
}
- void Query(SQLQuery* query, const std::string& q)
+ void Query(SQL::Query* query, const std::string& q)
{
SQLite3Result res;
sqlite3_stmt *stmt;
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));
+ SQL::Error error(SQL::QSEND_FAIL, sqlite3_errmsg(conn));
query->OnError(error);
return;
}
@@ -124,7 +153,7 @@ class SQLConn : public SQLProvider
{
const char* txt = (const char*)sqlite3_column_text(stmt, i);
if (txt)
- res.fieldlists[res.rows][i] = SQLEntry(txt);
+ res.fieldlists[res.rows][i] = SQL::Field(txt);
}
res.rows++;
}
@@ -135,7 +164,7 @@ class SQLConn : public SQLProvider
}
else
{
- SQLerror error(SQL_QREPLY_FAIL, sqlite3_errmsg(conn));
+ SQL::Error error(SQL::QREPLY_FAIL, sqlite3_errmsg(conn));
query->OnError(error);
break;
}
@@ -143,13 +172,13 @@ class SQLConn : public SQLProvider
sqlite3_finalize(stmt);
}
- void submit(SQLQuery* query, const std::string& q)
+ void Submit(SQL::Query* query, const std::string& q) CXX11_OVERRIDE
{
Query(query, q);
delete query;
}
- void submit(SQLQuery* query, const std::string& q, const ParamL& p)
+ void Submit(SQL::Query* query, const std::string& q, const SQL::ParamList& p) CXX11_OVERRIDE
{
std::string res;
unsigned int param = 0;
@@ -167,10 +196,10 @@ class SQLConn : public SQLProvider
}
}
}
- submit(query, res);
+ Submit(query, res);
}
- void submit(SQLQuery* query, const std::string& q, const ParamM& p)
+ void Submit(SQL::Query* query, const std::string& q, const SQL::ParamMap& p) CXX11_OVERRIDE
{
std::string res;
for(std::string::size_type i = 0; i < q.length(); i++)
@@ -185,7 +214,7 @@ class SQLConn : public SQLProvider
field.push_back(q[i++]);
i--;
- ParamM::const_iterator it = p.find(field);
+ SQL::ParamMap::const_iterator it = p.find(field);
if (it != p.end())
{
char* escaped = sqlite3_mprintf("%q", it->second.c_str());
@@ -194,7 +223,7 @@ class SQLConn : public SQLProvider
}
}
}
- submit(query, res);
+ Submit(query, res);
}
};
@@ -203,14 +232,6 @@ class ModuleSQLite3 : public Module
ConnMap conns;
public:
- void init() CXX11_OVERRIDE
- {
- ReadConf();
-
- Implementation eventlist[] = { I_OnRehash };
- ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
- }
-
~ModuleSQLite3()
{
ClearConns();
@@ -227,7 +248,7 @@ class ModuleSQLite3 : public Module
conns.clear();
}
- void ReadConf()
+ void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
{
ClearConns();
ConfigTagList tags = ServerInstance->Config->ConfTags("database");
@@ -241,11 +262,6 @@ class ModuleSQLite3 : public Module
}
}
- void OnRehash(User* user) CXX11_OVERRIDE
- {
- ReadConf();
- }
-
Version GetVersion() CXX11_OVERRIDE
{
return Version("sqlite3 provider", VF_VENDOR);