summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2022-03-06 12:45:44 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2022-03-06 17:30:17 +0000
commit678988c984156d45226c5d70beefb653a6d5824d (patch)
tree99781e57599c8c062f660331b92b69c85412170f
parentSimplify a few bits of code with fold expressions (diff)
downloadicetray-678988c984156d45226c5d70beefb653a6d5824d.tar.bz2
icetray-678988c984156d45226c5d70beefb653a6d5824d.tar.xz
icetray-678988c984156d45226c5d70beefb653a6d5824d.zip
Push basic database operations into a base class
-rw-r--r--icetray/icetray/abstractCachingDatabaseClient.cpp18
-rw-r--r--icetray/icetray/abstractCachingDatabaseClient.h5
-rw-r--r--icetray/icetray/abstractDatabaseClient.cpp10
-rw-r--r--icetray/icetray/abstractDatabaseClient.h56
-rw-r--r--icetray/icetray/basicDataClient.cpp11
-rw-r--r--icetray/icetray/basicDataClient.h61
-rw-r--r--icetray/unittests/testIceTrayServiceI.cpp1
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>