From 678988c984156d45226c5d70beefb653a6d5824d Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 6 Mar 2022 12:45:44 +0000 Subject: Push basic database operations into a base class --- icetray/icetray/abstractCachingDatabaseClient.cpp | 18 +------ icetray/icetray/abstractCachingDatabaseClient.h | 5 +- icetray/icetray/abstractDatabaseClient.cpp | 10 ---- icetray/icetray/abstractDatabaseClient.h | 56 +++------------------ icetray/icetray/basicDataClient.cpp | 11 ++++ icetray/icetray/basicDataClient.h | 61 +++++++++++++++++++++++ icetray/unittests/testIceTrayServiceI.cpp | 1 + 7 files changed, 86 insertions(+), 76 deletions(-) create mode 100644 icetray/icetray/basicDataClient.cpp create mode 100644 icetray/icetray/basicDataClient.h 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 -#include -#include -template DLL_PUBLIC void -AdHoc::Cache::add( - const IceTray::AbstractCachingDatabaseClient::CacheKey &, - const IceTray::AbstractCachingDatabaseClient::CacheItem &, time_t); -template DLL_PUBLIC IceTray::AbstractCachingDatabaseClient::Cache::Value -AdHoc::Cache::get( - const IceTray::AbstractCachingDatabaseClient::CacheKey &) const; - -namespace IceTray { - AbstractCachingDatabaseClient::AbstractCachingDatabaseClient(const DB::ConnectionPoolPtr & d) : - AbstractDatabaseClient(d) - { - } -} +template class AdHoc::Cache; 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 // IWYU pragma: keep #include #include -#include #include #include #include @@ -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 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 #include #include 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 -#include +#include "basicDataClient.h" #include -#include // IWYU pragma: keep #include -#include // IWYU pragma: keep #include -#include -#include // IWYU pragma: keep -#include #include #include -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 inline Domain fetch(const SqlSource & sql, const Params &... params) @@ -30,13 +26,6 @@ namespace IceTray { return fetch(std::nullopt, sql, params...); } - template - inline Domain - fetch(DB::Connection * c, const SqlSource & sql, const Params &... params) - { - return fetch(c, std::nullopt, sql, params...); - } - template inline Domain fetch(const std::optional & typeIdCol, const SqlSource & sql, const Params &... params) @@ -45,16 +34,6 @@ namespace IceTray { return fetch(c.get(), typeIdCol, sql, params...); } - template - inline Domain - fetch(DB::Connection * c, const std::optional & typeIdCol, const SqlSource & sql, - const Params &... params) - { - auto s = sql.select(c); - bind(s.get(), params...); - return Slicer::DeserializeAny(s.get(), typeIdCol); - } - template inline auto modify(const SqlSource & sql, const Params &... params) @@ -63,28 +42,9 @@ namespace IceTray { return modify(c.get(), sql, params...); } - template - 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 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 + +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 +#include +#include // IWYU pragma: keep +#include +#include // IWYU pragma: keep +#include +#include // IWYU pragma: keep +#include +#include +#include +namespace DB { + class Connection; +} + +namespace IceTray { + class DLL_PUBLIC BasicDatabaseClient { + protected: + template + static inline Domain + fetch(DB::Connection * c, const SqlSource & sql, const Params &... params) + { + return fetch(c, std::nullopt, sql, params...); + } + + template + static inline Domain + fetch(DB::Connection * c, const std::optional & typeIdCol, const SqlSource & sql, + const Params &... params) + { + auto s = sql.select(c); + bind(s.get(), params...); + return Slicer::DeserializeAny(s.get(), typeIdCol); + } + + template + 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 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 -- cgit v1.2.3