summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/database/database.hpp57
-rw-r--r--src/database/table.hpp14
2 files changed, 29 insertions, 42 deletions
diff --git a/src/database/database.hpp b/src/database/database.hpp
index 8364abc..b5f2ff0 100644
--- a/src/database/database.hpp
+++ b/src/database/database.hpp
@@ -20,79 +20,56 @@ class Database
public:
using time_point = std::chrono::system_clock::time_point;
- struct Uuid: Column<std::string> { static constexpr auto name = "uuid_";
- static constexpr auto options = ""; };
+ struct Uuid: Column<std::string> { static constexpr auto name = "uuid_"; };
- struct Owner: Column<std::string> { static constexpr auto name = "owner_";
- static constexpr auto options = ""; };
+ struct Owner: Column<std::string> { static constexpr auto name = "owner_"; };
- struct IrcChanName: Column<std::string> { static constexpr auto name = "ircChanName_";
- static constexpr auto options = ""; };
+ struct IrcChanName: Column<std::string> { static constexpr auto name = "ircChanName_"; };
- struct Channel: Column<std::string> { static constexpr auto name = "channel_";
- static constexpr auto options = ""; };
+ struct Channel: Column<std::string> { static constexpr auto name = "channel_"; };
- struct IrcServerName: Column<std::string> { static constexpr auto name = "ircServerName_";
- static constexpr auto options = ""; };
+ struct IrcServerName: Column<std::string> { static constexpr auto name = "ircServerName_"; };
- struct Server: Column<std::string> { static constexpr auto name = "server_";
- static constexpr auto options = ""; };
+ struct Server: Column<std::string> { static constexpr auto name = "server_"; };
- struct Date: Column<time_point::rep> { static constexpr auto name = "date_";
- static constexpr auto options = ""; };
+ struct Date: Column<time_point::rep> { static constexpr auto name = "date_"; };
- struct Body: Column<std::string> { static constexpr auto name = "body_";
- static constexpr auto options = ""; };
+ struct Body: Column<std::string> { static constexpr auto name = "body_"; };
- struct Nick: Column<std::string> { static constexpr auto name = "nick_";
- static constexpr auto options = ""; };
+ struct Nick: Column<std::string> { static constexpr auto name = "nick_"; };
- struct Pass: Column<std::string> { static constexpr auto name = "pass_";
- static constexpr auto options = ""; };
+ struct Pass: Column<std::string> { static constexpr auto name = "pass_"; };
struct Ports: Column<std::string> { static constexpr auto name = "ports_";
- static constexpr auto options = "";
Ports(): Column<std::string>("6667") {} };
struct TlsPorts: Column<std::string> { static constexpr auto name = "tlsPorts_";
- static constexpr auto options = "";
TlsPorts(): Column<std::string>("6697;6670") {} };
- struct Username: Column<std::string> { static constexpr auto name = "username_";
- static constexpr auto options = ""; };
+ struct Username: Column<std::string> { static constexpr auto name = "username_"; };
- struct Realname: Column<std::string> { static constexpr auto name = "realname_";
- static constexpr auto options = ""; };
+ struct Realname: Column<std::string> { static constexpr auto name = "realname_"; };
- struct AfterConnectionCommand: Column<std::string> { static constexpr auto name = "afterConnectionCommand_";
- static constexpr auto options = ""; };
+ struct AfterConnectionCommand: Column<std::string> { static constexpr auto name = "afterConnectionCommand_"; };
- struct TrustedFingerprint: Column<std::string> { static constexpr auto name = "trustedFingerprint_";
- static constexpr auto options = ""; };
+ struct TrustedFingerprint: Column<std::string> { static constexpr auto name = "trustedFingerprint_"; };
- struct EncodingOut: Column<std::string> { static constexpr auto name = "encodingOut_";
- static constexpr auto options = ""; };
+ struct EncodingOut: Column<std::string> { static constexpr auto name = "encodingOut_"; };
- struct EncodingIn: Column<std::string> { static constexpr auto name = "encodingIn_";
- static constexpr auto options = ""; };
+ struct EncodingIn: Column<std::string> { static constexpr auto name = "encodingIn_"; };
struct MaxHistoryLength: Column<int> { static constexpr auto name = "maxHistoryLength_";
- static constexpr auto options = "";
MaxHistoryLength(): Column<int>(20) {} };
struct RecordHistory: Column<bool> { static constexpr auto name = "recordHistory_";
- static constexpr auto options = "";
RecordHistory(): Column<bool>(true) {}};
- struct RecordHistoryOptional: Column<OptionalBool> { static constexpr auto name = "recordHistory_";
- static constexpr auto options = ""; };
+ struct RecordHistoryOptional: Column<OptionalBool> { static constexpr auto name = "recordHistory_"; };
struct VerifyCert: Column<bool> { static constexpr auto name = "verifyCert_";
- static constexpr auto options = "";
VerifyCert(): Column<bool>(true) {} };
struct Persistent: Column<bool> { static constexpr auto name = "persistent_";
- static constexpr auto options = "";
Persistent(): Column<bool>(false) {} };
using MucLogLineTable = Table<Id, Uuid, Owner, IrcChanName, IrcServerName, Date, Body, Nick>;
diff --git a/src/database/table.hpp b/src/database/table.hpp
index 411ac6a..f2f70bb 100644
--- a/src/database/table.hpp
+++ b/src/database/table.hpp
@@ -28,6 +28,17 @@ void add_column_to_table(sqlite3* db, const std::string& table_name)
}
}
+
+template <typename ColumnType, decltype(ColumnType::options) = nullptr>
+void append_option(std::string& s)
+{
+ s += " "s + ColumnType::options;
+}
+
+template <typename>
+void append_option(...)
+{ }
+
template <typename... T>
class Table
{
@@ -110,14 +121,13 @@ class Table
str += ColumnType::name;
str += " ";
str += TypeToSQLType<RealType>::type;
- str += " "s + ColumnType::options;
+ append_option<ColumnType>(str);
if (N != sizeof...(T) - 1)
str += ",";
str += "\n";
add_column_create<N+1>(str);
}
-
template <std::size_t N=0>
typename std::enable_if<N == sizeof...(T), void>::type
add_column_create(std::string&)