Remove all the empty “options” members in Column classes
By using SFINAE to use that member only when it exists.
This commit is contained in:
+17
-40
@@ -20,79 +20,56 @@ class Database
|
|||||||
public:
|
public:
|
||||||
using time_point = std::chrono::system_clock::time_point;
|
using time_point = std::chrono::system_clock::time_point;
|
||||||
|
|
||||||
struct Uuid: Column<std::string> { static constexpr auto name = "uuid_";
|
struct Uuid: Column<std::string> { static constexpr auto name = "uuid_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct Owner: Column<std::string> { static constexpr auto name = "owner_";
|
struct Owner: Column<std::string> { static constexpr auto name = "owner_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct IrcChanName: Column<std::string> { static constexpr auto name = "ircChanName_";
|
struct IrcChanName: Column<std::string> { static constexpr auto name = "ircChanName_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct Channel: Column<std::string> { static constexpr auto name = "channel_";
|
struct Channel: Column<std::string> { static constexpr auto name = "channel_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct IrcServerName: Column<std::string> { static constexpr auto name = "ircServerName_";
|
struct IrcServerName: Column<std::string> { static constexpr auto name = "ircServerName_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct Server: Column<std::string> { static constexpr auto name = "server_";
|
struct Server: Column<std::string> { static constexpr auto name = "server_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct Date: Column<time_point::rep> { static constexpr auto name = "date_";
|
struct Date: Column<time_point::rep> { static constexpr auto name = "date_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct Body: Column<std::string> { static constexpr auto name = "body_";
|
struct Body: Column<std::string> { static constexpr auto name = "body_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct Nick: Column<std::string> { static constexpr auto name = "nick_";
|
struct Nick: Column<std::string> { static constexpr auto name = "nick_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct Pass: Column<std::string> { static constexpr auto name = "pass_";
|
struct Pass: Column<std::string> { static constexpr auto name = "pass_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct Ports: Column<std::string> { static constexpr auto name = "ports_";
|
struct Ports: Column<std::string> { static constexpr auto name = "ports_";
|
||||||
static constexpr auto options = "";
|
|
||||||
Ports(): Column<std::string>("6667") {} };
|
Ports(): Column<std::string>("6667") {} };
|
||||||
|
|
||||||
struct TlsPorts: Column<std::string> { static constexpr auto name = "tlsPorts_";
|
struct TlsPorts: Column<std::string> { static constexpr auto name = "tlsPorts_";
|
||||||
static constexpr auto options = "";
|
|
||||||
TlsPorts(): Column<std::string>("6697;6670") {} };
|
TlsPorts(): Column<std::string>("6697;6670") {} };
|
||||||
|
|
||||||
struct Username: Column<std::string> { static constexpr auto name = "username_";
|
struct Username: Column<std::string> { static constexpr auto name = "username_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct Realname: Column<std::string> { static constexpr auto name = "realname_";
|
struct Realname: Column<std::string> { static constexpr auto name = "realname_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct AfterConnectionCommand: Column<std::string> { static constexpr auto name = "afterConnectionCommand_";
|
struct AfterConnectionCommand: Column<std::string> { static constexpr auto name = "afterConnectionCommand_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct TrustedFingerprint: Column<std::string> { static constexpr auto name = "trustedFingerprint_";
|
struct TrustedFingerprint: Column<std::string> { static constexpr auto name = "trustedFingerprint_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct EncodingOut: Column<std::string> { static constexpr auto name = "encodingOut_";
|
struct EncodingOut: Column<std::string> { static constexpr auto name = "encodingOut_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct EncodingIn: Column<std::string> { static constexpr auto name = "encodingIn_";
|
struct EncodingIn: Column<std::string> { static constexpr auto name = "encodingIn_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct MaxHistoryLength: Column<int> { static constexpr auto name = "maxHistoryLength_";
|
struct MaxHistoryLength: Column<int> { static constexpr auto name = "maxHistoryLength_";
|
||||||
static constexpr auto options = "";
|
|
||||||
MaxHistoryLength(): Column<int>(20) {} };
|
MaxHistoryLength(): Column<int>(20) {} };
|
||||||
|
|
||||||
struct RecordHistory: Column<bool> { static constexpr auto name = "recordHistory_";
|
struct RecordHistory: Column<bool> { static constexpr auto name = "recordHistory_";
|
||||||
static constexpr auto options = "";
|
|
||||||
RecordHistory(): Column<bool>(true) {}};
|
RecordHistory(): Column<bool>(true) {}};
|
||||||
|
|
||||||
struct RecordHistoryOptional: Column<OptionalBool> { static constexpr auto name = "recordHistory_";
|
struct RecordHistoryOptional: Column<OptionalBool> { static constexpr auto name = "recordHistory_"; };
|
||||||
static constexpr auto options = ""; };
|
|
||||||
|
|
||||||
struct VerifyCert: Column<bool> { static constexpr auto name = "verifyCert_";
|
struct VerifyCert: Column<bool> { static constexpr auto name = "verifyCert_";
|
||||||
static constexpr auto options = "";
|
|
||||||
VerifyCert(): Column<bool>(true) {} };
|
VerifyCert(): Column<bool>(true) {} };
|
||||||
|
|
||||||
struct Persistent: Column<bool> { static constexpr auto name = "persistent_";
|
struct Persistent: Column<bool> { static constexpr auto name = "persistent_";
|
||||||
static constexpr auto options = "";
|
|
||||||
Persistent(): Column<bool>(false) {} };
|
Persistent(): Column<bool>(false) {} };
|
||||||
|
|
||||||
using MucLogLineTable = Table<Id, Uuid, Owner, IrcChanName, IrcServerName, Date, Body, Nick>;
|
using MucLogLineTable = Table<Id, Uuid, Owner, IrcChanName, IrcServerName, Date, Body, Nick>;
|
||||||
|
|||||||
+12
-2
@@ -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>
|
template <typename... T>
|
||||||
class Table
|
class Table
|
||||||
{
|
{
|
||||||
@@ -110,14 +121,13 @@ class Table
|
|||||||
str += ColumnType::name;
|
str += ColumnType::name;
|
||||||
str += " ";
|
str += " ";
|
||||||
str += TypeToSQLType<RealType>::type;
|
str += TypeToSQLType<RealType>::type;
|
||||||
str += " "s + ColumnType::options;
|
append_option<ColumnType>(str);
|
||||||
if (N != sizeof...(T) - 1)
|
if (N != sizeof...(T) - 1)
|
||||||
str += ",";
|
str += ",";
|
||||||
str += "\n";
|
str += "\n";
|
||||||
|
|
||||||
add_column_create<N+1>(str);
|
add_column_create<N+1>(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <std::size_t N=0>
|
template <std::size_t N=0>
|
||||||
typename std::enable_if<N == sizeof...(T), void>::type
|
typename std::enable_if<N == sizeof...(T), void>::type
|
||||||
add_column_create(std::string&)
|
add_column_create(std::string&)
|
||||||
|
|||||||
Reference in New Issue
Block a user