From 369ccb037619871403b14c959bbb359332133810 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?louiz=E2=80=99?= <louiz@louiz.org>
Date: Tue, 13 Jun 2017 11:18:05 +0200
Subject: Add default values for the database columns

---
 src/bridge/bridge.cpp        |  6 ++++--
 src/database/column.hpp      |  6 +++++-
 src/database/database.hpp    | 18 ++++++++++++------
 tests/end_to_end/__main__.py |  2 +-
 4 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/src/bridge/bridge.cpp b/src/bridge/bridge.cpp
index fcfcc24..23ecfe9 100644
--- a/src/bridge/bridge.cpp
+++ b/src/bridge/bridge.cpp
@@ -23,12 +23,14 @@ static std::string in_encoding_for(const Bridge& bridge, const Iid& iid)
 #ifdef USE_DATABASE
   const auto jid = bridge.get_bare_jid();
   auto options = Database::get_irc_channel_options_with_server_default(jid, iid.get_server(), iid.get_local());
-  return options.col<Database::EncodingIn>();
+  auto result = options.col<Database::EncodingIn>();
+  if (!result.empty())
+    return result;
 #else
   (void)bridge;
   (void)iid;
-  return {"ISO-8859-1"};
 #endif
+  return {"ISO-8859-1"};
 }
 
 Bridge::Bridge(std::string user_jid, BiboumiComponent& xmpp, std::shared_ptr<Poller>& poller):
diff --git a/src/database/column.hpp b/src/database/column.hpp
index e74d426..22f4254 100644
--- a/src/database/column.hpp
+++ b/src/database/column.hpp
@@ -5,8 +5,12 @@
 template <typename T>
 struct Column
 {
+    Column(T default_value):
+        value{default_value} {}
+    Column():
+        value{} {}
     using real_type = T;
-    T value;
+    T value{};
 };
 
 struct Id: Column<std::size_t> { static constexpr auto name = "id_";
diff --git a/src/database/database.hpp b/src/database/database.hpp
index ebc4878..a0611c1 100644
--- a/src/database/database.hpp
+++ b/src/database/database.hpp
@@ -49,10 +49,12 @@ class Database
     static constexpr auto options = ""; };
 
   struct Ports: Column<std::string> { static constexpr auto name = "tlsPorts_";
-    static constexpr auto options = ""; };
+    static constexpr auto options = "";
+    Ports(): Column<std::string>("6667") {}};
 
   struct TlsPorts: Column<std::string> { static constexpr auto name = "ports_";
-    static constexpr auto options = ""; };
+    static constexpr auto options = "";
+    TlsPorts(): Column<std::string>("6697;6670") {} };
 
   struct Username: Column<std::string> { static constexpr auto name = "username_";
     static constexpr auto options = ""; };
@@ -73,16 +75,20 @@ class Database
     static constexpr auto options = ""; };
 
   struct MaxHistoryLength: Column<int> { static constexpr auto name = "maxHistoryLength_";
-    static constexpr auto options = ""; };
+    static constexpr auto options = "";
+    MaxHistoryLength(): Column<int>(20) {} };
 
   struct RecordHistory: Column<bool> { static constexpr auto name = "recordHistory_";
-    static constexpr auto options = ""; };
+    static constexpr auto options = "";
+    RecordHistory(): Column<bool>(true) {}};
 
   struct VerifyCert: Column<bool> { static constexpr auto name = "verifyCert_";
-    static constexpr auto options = ""; };
+    static constexpr auto options = "";
+    VerifyCert(): Column<bool>(true) {} };
 
   struct Persistent: Column<bool> { static constexpr auto name = "persistent_";
-    static constexpr auto options = ""; };
+    static constexpr auto options = "";
+    Persistent(): Column<bool>(false) {} };
 
   using MucLogLineTable = Table<Id, Uuid, Owner, IrcChanName, IrcServerName, Date, Body, Nick>;
   using MucLogLine = MucLogLineTable::RowType;
diff --git a/tests/end_to_end/__main__.py b/tests/end_to_end/__main__.py
index f9e04a8..8f108ee 100644
--- a/tests/end_to_end/__main__.py
+++ b/tests/end_to_end/__main__.py
@@ -2417,7 +2417,7 @@ if __name__ == '__main__':
                                              "/iq/commands:command/dataform:x[@type='form']/dataform:field[@type='text-single'][@var='username']",
                                              "/iq/commands:command/dataform:x[@type='form']/dataform:field[@type='text-single'][@var='realname']",
                                              "/iq/commands:command/dataform:x[@type='form']/dataform:field[@type='text-single'][@var='encoding_in']",
-                                             "/iq/commands:command/dataform:x[@type='form']/dataform:field[@type='text-single'][@var='encoding_out']/dataform:value[text()='ISO-8859-1']",
+                                             "/iq/commands:command/dataform:x[@type='form']/dataform:field[@type='text-single'][@var='encoding_out']",
                                              "/iq/commands:command/commands:actions/commands:next",
                                              ),
                              after = partial(save_value, "sessionid", partial(extract_attribute, "/iq[@type='result']/commands:command[@node='configure']", "sessionid"))
-- 
cgit v1.2.3