From 68b336a75812838dfcf0b163c898fe1dd45de9fc Mon Sep 17 00:00:00 2001 From: heck Date: Mon, 19 Apr 2021 20:26:25 +0200 Subject: [PATCH] ListManagerDummy - Add public methods list_exists() / member_exists() --- src/listmanager_dummy.cc | 70 ++++++++++++++++++++++++++++++++++++++++ src/listmanager_dummy.hh | 6 ++-- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/src/listmanager_dummy.cc b/src/listmanager_dummy.cc index 9f14016..3c66224 100644 --- a/src/listmanager_dummy.cc +++ b/src/listmanager_dummy.cc @@ -244,6 +244,76 @@ namespace pEp { return ret; } + bool ListManagerDummy::list_exists(const std::string& addr_list) + { + pEpLogClass("list_exists(addr_list:\"" + addr_list + "\")"); + bool ret{ false }; + ensure_db_initialized(); + + ResultSet rs; + int rescount = 0; + try { + string sql; + sql = "SELECT COUNT(address) AS rescount " + "FROM lists " + "WHERE address = '" + + addr_list + "';"; + rs = db.execute(sql); + rescount = pEpSQLite::eval_sql_count(rs, "rescount"); + } catch (...) { + DBException e{ "ListManagerDummy: list_exists(addr_list:\"" + addr_list + "\")" }; + throw_with_nested(e); + } + // Check FATAL inconsistency + if (rescount > 1) { + DBException e{ "ListManagerDummy: list_exists(addr_list:\"" + addr_list + + "\") - FATAL DB CONSTRAINT ERROR: list exists more than once" }; + throw_with_nested(e); + } + + if (rescount == 1) { + ret = true; + } + return ret; + } + + bool ListManagerDummy::member_exists(const std::string& addr_list, const std::string& addr_member) + { + pEpLogClass( + "member_exists(addr_list:\"" + addr_list + "\", addr_member:\"" + addr_member + "\")"); + bool ret{ false }; + ensure_db_initialized(); + + ResultSet rs; + int rescount = 0; + try { + string sql; + sql = "SELECT COUNT(address) AS rescount " + "FROM member_of " + "WHERE (address = '" + + addr_member + "' AND list_address = '" + addr_list + "');"; + rs = db.execute(sql); + rescount = pEpSQLite::eval_sql_count(rs, "rescount"); + } catch (...) { + DBException e{ "member_exists(addr_list:\"" + addr_list + "\", addr_member:\"" + + addr_member + "\")" }; + throw_with_nested(e); + } + // Check FATAL inconsistency + if (rescount > 1) { + DBException e{ "member_exists(addr_list:\"" + addr_list + "\", addr_member:\"" + + addr_member + + "\") - FATAL DB CONSTRAINT ERROR: list exists more than once" }; + throw_with_nested(e); + } + + if (rescount == 1) { + ret = true; + } + return ret; + } + + // public ListManagerDummy::~ListManagerDummy() { diff --git a/src/listmanager_dummy.hh b/src/listmanager_dummy.hh index 7e9139d..e3fed72 100644 --- a/src/listmanager_dummy.hh +++ b/src/listmanager_dummy.hh @@ -21,8 +21,10 @@ namespace pEp { void member_remove(const std::string& addr_list, const std::string& addr_member); // Query std::vector lists(); - std::string moderator(const std::string& list_address); - std::vector members(const std::string& list_address); + std::string moderator(const std::string& addr_list); + std::vector members(const std::string& addr_list); + bool list_exists(const std::string& addr_list); + bool member_exists(const std::string& addr_list, const std::string& addr_member); // db void close_db(); void delete_db();