summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlouiz’ <louiz@louiz.org>2017-12-01 14:59:22 +0100
committerlouiz’ <louiz@louiz.org>2017-12-02 20:08:50 +0100
commit414bbca0bc2bf20c4f424c2368997a46129b32cc (patch)
treec9e67c8eedee84963ecc920d8158738770f9238e /src
parent923cf31ba62ebfd2369a9594a60020477730b649 (diff)
downloadbiboumi-414bbca0bc2bf20c4f424c2368997a46129b32cc.tar.gz
biboumi-414bbca0bc2bf20c4f424c2368997a46129b32cc.tar.bz2
biboumi-414bbca0bc2bf20c4f424c2368997a46129b32cc.tar.xz
biboumi-414bbca0bc2bf20c4f424c2368997a46129b32cc.zip
Handle postgresql and sqlite3 libs properly
Do not fail to compile when one of them is missing but the other one is not. Raise an error when trying to open a database with the missing library. see #3237
Diffstat (limited to 'src')
-rw-r--r--src/biboumi.h.cmake2
-rw-r--r--src/database/count_query.hpp2
-rw-r--r--src/database/database.cpp2
-rw-r--r--src/database/insert_query.hpp2
-rw-r--r--src/database/postgresql_engine.cpp5
-rw-r--r--src/database/postgresql_engine.hpp27
-rw-r--r--src/database/query.hpp2
-rw-r--r--src/database/row.hpp2
-rw-r--r--src/database/select_query.hpp4
-rw-r--r--src/database/sqlite3_engine.cpp6
-rw-r--r--src/database/sqlite3_engine.hpp19
-rw-r--r--src/main.cpp5
12 files changed, 56 insertions, 22 deletions
diff --git a/src/biboumi.h.cmake b/src/biboumi.h.cmake
index 1ad9a40..5bc1004 100644
--- a/src/biboumi.h.cmake
+++ b/src/biboumi.h.cmake
@@ -6,6 +6,8 @@
#cmakedefine BOTAN_FOUND
#cmakedefine GCRYPT_FOUND
#cmakedefine UDNS_FOUND
+#cmakedefine PQ_FOUND
+#cmakedefine SQLITE3_FOUND
#cmakedefine SOFTWARE_VERSION "${SOFTWARE_VERSION}"
#cmakedefine PROJECT_NAME "${PROJECT_NAME}"
#cmakedefine HAS_GET_TIME
diff --git a/src/database/count_query.hpp b/src/database/count_query.hpp
index b462e0f..e8d24ef 100644
--- a/src/database/count_query.hpp
+++ b/src/database/count_query.hpp
@@ -6,8 +6,6 @@
#include <string>
-#include <sqlite3.h>
-
struct CountQuery: public Query
{
CountQuery(std::string name):
diff --git a/src/database/database.cpp b/src/database/database.cpp
index f9a365d..ae5654c 100644
--- a/src/database/database.cpp
+++ b/src/database/database.cpp
@@ -15,8 +15,6 @@
#include <memory>
-#include <sqlite3.h>
-
std::unique_ptr<DatabaseEngine> Database::db;
Database::MucLogLineTable Database::muc_log_lines("muclogline_");
Database::GlobalOptionsTable Database::global_options("globaloptions_");
diff --git a/src/database/insert_query.hpp b/src/database/insert_query.hpp
index 2fc0512..853b7f1 100644
--- a/src/database/insert_query.hpp
+++ b/src/database/insert_query.hpp
@@ -10,8 +10,6 @@
#include <string>
#include <tuple>
-#include <sqlite3.h>
-
template <std::size_t N=0, typename... T>
typename std::enable_if<N < sizeof...(T), void>::type
update_autoincrement_id(std::tuple<T...>& columns, Statement& statement)
diff --git a/src/database/postgresql_engine.cpp b/src/database/postgresql_engine.cpp
index 9f603ab..1c01ed5 100644
--- a/src/database/postgresql_engine.cpp
+++ b/src/database/postgresql_engine.cpp
@@ -1,3 +1,6 @@
+#include <biboumi.h>
+#ifdef PQ_FOUND
+
#include <database/postgresql_engine.hpp>
#include <database/postgresql_statement.hpp>
@@ -75,3 +78,5 @@ std::string PostgresqlEngine::id_column_type()
{
return "SERIAL";
}
+
+#endif
diff --git a/src/database/postgresql_engine.hpp b/src/database/postgresql_engine.hpp
index e6444d4..fe4fb53 100644
--- a/src/database/postgresql_engine.hpp
+++ b/src/database/postgresql_engine.hpp
@@ -1,16 +1,20 @@
#pragma once
-#include <database/engine.hpp>
+#include <biboumi.h>
+#include <string>
+#include <stdexcept>
+#include <memory>
#include <database/statement.hpp>
+#include <database/engine.hpp>
-#include <libpq-fe.h>
-
-#include <memory>
-#include <string>
#include <tuple>
#include <set>
+#ifdef PQ_FOUND
+
+#include <libpq-fe.h>
+
class PostgresqlEngine: public DatabaseEngine
{
public:
@@ -29,3 +33,16 @@ class PostgresqlEngine: public DatabaseEngine
private:
PGconn* const conn;
};
+
+#else
+
+class PostgresqlEngine
+{
+public:
+ static std::unique_ptr<DatabaseEngine> open(const std::string& string)
+ {
+ throw std::runtime_error("Cannot open postgresql database "s + string + ": biboumi is not compiled with libpq.");
+ }
+};
+
+#endif
diff --git a/src/database/query.hpp b/src/database/query.hpp
index 2467749..7f8aecb 100644
--- a/src/database/query.hpp
+++ b/src/database/query.hpp
@@ -9,8 +9,6 @@
#include <vector>
#include <string>
-#include <sqlite3.h>
-
void actual_bind(Statement& statement, const std::string& value, int index);
void actual_bind(Statement& statement, const std::size_t value, int index);
void actual_bind(Statement& statement, const OptionalBool& value, int index);
diff --git a/src/database/row.hpp b/src/database/row.hpp
index b69fac5..1b50ff9 100644
--- a/src/database/row.hpp
+++ b/src/database/row.hpp
@@ -8,8 +8,6 @@
#include <type_traits>
-#include <sqlite3.h>
-
template <typename... T>
struct Row
{
diff --git a/src/database/select_query.hpp b/src/database/select_query.hpp
index 22b342e..837a866 100644
--- a/src/database/select_query.hpp
+++ b/src/database/select_query.hpp
@@ -12,12 +12,10 @@
#include <vector>
#include <string>
-#include <sqlite3.h>
-
using namespace std::string_literals;
template <typename T>
-typename std::enable_if<std::is_integral<T>::value, sqlite3_int64>::type
+typename std::enable_if<std::is_integral<T>::value, std::int64_t>::type
extract_row_value(Statement& statement, const int i)
{
return statement.get_column_int64(i);
diff --git a/src/database/sqlite3_engine.cpp b/src/database/sqlite3_engine.cpp
index 7e34f89..a94a892 100644
--- a/src/database/sqlite3_engine.cpp
+++ b/src/database/sqlite3_engine.cpp
@@ -1,3 +1,7 @@
+#include <biboumi.h>
+
+#ifdef SQLITE3_FOUND
+
#include <database/sqlite3_engine.hpp>
#include <database/sqlite3_statement.hpp>
@@ -91,3 +95,5 @@ std::string Sqlite3Engine::id_column_type()
{
return "INTEGER PRIMARY KEY AUTOINCREMENT";
}
+
+#endif
diff --git a/src/database/sqlite3_engine.hpp b/src/database/sqlite3_engine.hpp
index eb18d0c..5b8176c 100644
--- a/src/database/sqlite3_engine.hpp
+++ b/src/database/sqlite3_engine.hpp
@@ -4,12 +4,17 @@
#include <database/statement.hpp>
-#include <sqlite3.h>
#include <memory>
#include <string>
#include <tuple>
#include <set>
+#include <biboumi.h>
+
+#ifdef SQLITE3_FOUND
+
+#include <sqlite3.h>
+
class Sqlite3Engine: public DatabaseEngine
{
public:
@@ -28,3 +33,15 @@ private:
sqlite3* const db;
};
+#else
+
+class Sqlite3Engine
+{
+public:
+ static std::unique_ptr<DatabaseEngine> open(const std::string& string)
+ {
+ throw std::runtime_error("Cannot open sqlite3 database "s + string + ": biboumi is not compiled with sqlite3 lib.");
+ }
+};
+
+#endif
diff --git a/src/main.cpp b/src/main.cpp
index 284d289..c877e43 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -6,8 +6,6 @@
#include <utils/xdg.hpp>
#include <utils/reload.hpp>
-#include <libpq-fe.h>
-
#ifdef UDNS_FOUND
# include <network/dns_handler.hpp>
#endif
@@ -90,7 +88,8 @@ int main(int ac, char** av)
#ifdef USE_DATABASE
try {
open_database();
- } catch (...) {
+ } catch (const std::exception& e) {
+ log_error(e.what());
return 1;
}
#endif