diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2022-03-06 12:45:44 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2022-03-06 17:30:17 +0000 |
commit | 678988c984156d45226c5d70beefb653a6d5824d (patch) | |
tree | 99781e57599c8c062f660331b92b69c85412170f | |
parent | Simplify a few bits of code with fold expressions (diff) | |
download | icetray-678988c984156d45226c5d70beefb653a6d5824d.tar.bz2 icetray-678988c984156d45226c5d70beefb653a6d5824d.tar.xz icetray-678988c984156d45226c5d70beefb653a6d5824d.zip |
Push basic database operations into a base class
-rw-r--r-- | icetray/icetray/abstractCachingDatabaseClient.cpp | 18 | ||||
-rw-r--r-- | icetray/icetray/abstractCachingDatabaseClient.h | 5 | ||||
-rw-r--r-- | icetray/icetray/abstractDatabaseClient.cpp | 10 | ||||
-rw-r--r-- | icetray/icetray/abstractDatabaseClient.h | 56 | ||||
-rw-r--r-- | icetray/icetray/basicDataClient.cpp | 11 | ||||
-rw-r--r-- | icetray/icetray/basicDataClient.h | 61 | ||||
-rw-r--r-- | icetray/unittests/testIceTrayServiceI.cpp | 1 |
7 files changed, 86 insertions, 76 deletions
diff --git a/icetray/icetray/abstractCachingDatabaseClient.cpp b/icetray/icetray/abstractCachingDatabaseClient.cpp index fcd5ed5..ba9c87b 100644 --- a/icetray/icetray/abstractCachingDatabaseClient.cpp +++ b/icetray/icetray/abstractCachingDatabaseClient.cpp @@ -1,19 +1,5 @@ #include "abstractCachingDatabaseClient.h" #include <cache.impl.h> -#include <connectionPool.h> -#include <visibility.h> -template DLL_PUBLIC void -AdHoc::Cache<IceTray::AbstractCachingDatabaseClient::CacheItem, IceTray::AbstractCachingDatabaseClient::CacheKey>::add( - const IceTray::AbstractCachingDatabaseClient::CacheKey &, - const IceTray::AbstractCachingDatabaseClient::CacheItem &, time_t); -template DLL_PUBLIC IceTray::AbstractCachingDatabaseClient::Cache::Value -AdHoc::Cache<IceTray::AbstractCachingDatabaseClient::CacheItem, IceTray::AbstractCachingDatabaseClient::CacheKey>::get( - const IceTray::AbstractCachingDatabaseClient::CacheKey &) const; - -namespace IceTray { - AbstractCachingDatabaseClient::AbstractCachingDatabaseClient(const DB::ConnectionPoolPtr & d) : - AbstractDatabaseClient(d) - { - } -} +template class AdHoc::Cache<IceTray::AbstractCachingDatabaseClient::CacheItem, + IceTray::AbstractCachingDatabaseClient::CacheKey>; diff --git a/icetray/icetray/abstractCachingDatabaseClient.h b/icetray/icetray/abstractCachingDatabaseClient.h index eac937c..142515f 100644 --- a/icetray/icetray/abstractCachingDatabaseClient.h +++ b/icetray/icetray/abstractCachingDatabaseClient.h @@ -7,7 +7,6 @@ #include <cache.h> // IWYU pragma: keep #include <command.h> #include <command_fwd.h> -#include <connectionPool.h> #include <ctime> #include <functional> #include <memory> @@ -27,7 +26,9 @@ namespace IceTray { using CacheItem = std::any; public: - explicit AbstractCachingDatabaseClient(const DB::ConnectionPoolPtr & d); + using AbstractDatabaseClient::AbstractDatabaseClient; + using AbstractDatabaseClient::fetch; + using AbstractDatabaseClient::modify; template<typename Domain, typename... Params> inline Domain diff --git a/icetray/icetray/abstractDatabaseClient.cpp b/icetray/icetray/abstractDatabaseClient.cpp index 289e886..c23d320 100644 --- a/icetray/icetray/abstractDatabaseClient.cpp +++ b/icetray/icetray/abstractDatabaseClient.cpp @@ -1,17 +1,7 @@ #include "abstractDatabaseClient.h" -#include <command.h> #include <connectionPool.h> #include <utility> namespace IceTray { AbstractDatabaseClient::AbstractDatabaseClient(DB::ConnectionPoolPtr d) : db(std::move(d)) { } } - -namespace DB { - template<> - void - Command::bindParam(unsigned int offset, const Ice::ByteSeq & p) - { - this->bindParamBLOB(offset, p); - } -} diff --git a/icetray/icetray/abstractDatabaseClient.h b/icetray/icetray/abstractDatabaseClient.h index 85f95b2..5b0807d 100644 --- a/icetray/icetray/abstractDatabaseClient.h +++ b/icetray/icetray/abstractDatabaseClient.h @@ -1,28 +1,24 @@ #ifndef ICETRAY_ABSTRACTDATABASECLIENT_H #define ICETRAY_ABSTRACTDATABASECLIENT_H -#include "sqlSource.h" -#include <Ice/BuiltinSequences.h> -#include <command.h> +#include "basicDataClient.h" #include <connectionPool.h> -#include <db/sqlSelectDeserializer.h> // IWYU pragma: keep #include <memory> -#include <modifycommand.h> // IWYU pragma: keep #include <optional> -#include <resourcePool.impl.h> -#include <selectcommand.h> // IWYU pragma: keep -#include <slicer/slicer.h> #include <string> #include <visibility.h> -namespace DB { - class Connection; -} +// IWYU pragma: no_include "resourcePool.impl.h" namespace IceTray { - class DLL_PUBLIC AbstractDatabaseClient { + class SqlSource; + + class DLL_PUBLIC AbstractDatabaseClient : public BasicDatabaseClient { public: explicit AbstractDatabaseClient(DB::ConnectionPoolPtr d); + using BasicDatabaseClient::fetch; + using BasicDatabaseClient::modify; + template<typename Domain, typename... Params> inline Domain fetch(const SqlSource & sql, const Params &... params) @@ -32,29 +28,12 @@ namespace IceTray { template<typename Domain, typename... Params> inline Domain - fetch(DB::Connection * c, const SqlSource & sql, const Params &... params) - { - return fetch<Domain, Params...>(c, std::nullopt, sql, params...); - } - - template<typename Domain, typename... Params> - inline Domain fetch(const std::optional<std::string> & typeIdCol, const SqlSource & sql, const Params &... params) { auto c = db->get(); return fetch<Domain, Params...>(c.get(), typeIdCol, sql, params...); } - template<typename Domain, typename... Params> - inline Domain - fetch(DB::Connection * c, const std::optional<std::string> & typeIdCol, const SqlSource & sql, - const Params &... params) - { - auto s = sql.select(c); - bind(s.get(), params...); - return Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, Domain>(s.get(), typeIdCol); - } - template<typename... Params> inline auto modify(const SqlSource & sql, const Params &... params) @@ -63,28 +42,9 @@ namespace IceTray { return modify(c.get(), sql, params...); } - template<typename... Params> - inline auto - modify(DB::Connection * c, const SqlSource & sql, const Params &... params) - { - auto s = sql.modify(c); - bind(s.get(), params...); - return s->execute(); - } - protected: - template<typename... Params> static void inline bind(DB::Command * cmd, const Params &... params) - { - unsigned int offset {}; - (cmd->bindParam(offset++, params), ...); - } - DB::ConnectionPoolPtr db; }; } -namespace DB { - template<> void Command::bindParam(unsigned int offset, const Ice::ByteSeq & p); -} - #endif diff --git a/icetray/icetray/basicDataClient.cpp b/icetray/icetray/basicDataClient.cpp new file mode 100644 index 0000000..5855dce --- /dev/null +++ b/icetray/icetray/basicDataClient.cpp @@ -0,0 +1,11 @@ +#include "basicDataClient.h" +#include <command.h> + +namespace DB { + template<> + void + Command::bindParam(unsigned int offset, const Ice::ByteSeq & p) + { + this->bindParamBLOB(offset, p); + } +} diff --git a/icetray/icetray/basicDataClient.h b/icetray/icetray/basicDataClient.h new file mode 100644 index 0000000..b5a03de --- /dev/null +++ b/icetray/icetray/basicDataClient.h @@ -0,0 +1,61 @@ +#ifndef ICETRAY_BASICDATABASECLIENT_H +#define ICETRAY_BASICDATABASECLIENT_H + +#include "sqlSource.h" +#include <Ice/BuiltinSequences.h> +#include <command.h> +#include <db/sqlSelectDeserializer.h> // IWYU pragma: keep +#include <memory> +#include <modifycommand.h> // IWYU pragma: keep +#include <optional> +#include <selectcommand.h> // IWYU pragma: keep +#include <slicer/slicer.h> +#include <string> +#include <visibility.h> +namespace DB { + class Connection; +} + +namespace IceTray { + class DLL_PUBLIC BasicDatabaseClient { + protected: + template<typename Domain, typename... Params> + static inline Domain + fetch(DB::Connection * c, const SqlSource & sql, const Params &... params) + { + return fetch<Domain, Params...>(c, std::nullopt, sql, params...); + } + + template<typename Domain, typename... Params> + static inline Domain + fetch(DB::Connection * c, const std::optional<std::string> & typeIdCol, const SqlSource & sql, + const Params &... params) + { + auto s = sql.select(c); + bind(s.get(), params...); + return Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, Domain>(s.get(), typeIdCol); + } + + template<typename... Params> + static inline auto + modify(DB::Connection * c, const SqlSource & sql, const Params &... params) + { + auto s = sql.modify(c); + bind(s.get(), params...); + return s->execute(); + } + + protected: + template<typename... Params> static void inline bind(DB::Command * cmd, const Params &... params) + { + unsigned int offset {}; + (cmd->bindParam(offset++, params), ...); + } + }; +} + +namespace DB { + template<> void Command::bindParam(unsigned int offset, const Ice::ByteSeq & p); +} + +#endif diff --git a/icetray/unittests/testIceTrayServiceI.cpp b/icetray/unittests/testIceTrayServiceI.cpp index fce0992..44ef966 100644 --- a/icetray/unittests/testIceTrayServiceI.cpp +++ b/icetray/unittests/testIceTrayServiceI.cpp @@ -1,4 +1,5 @@ #include "testIceTrayServiceI.h" +#include "basicDataClient.h" #include "icecube.h" #include "testIceTrayService.h" #include <Ice/Communicator.h> |