summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2017-07-21 20:43:52 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2017-07-21 20:43:52 +0100
commit2bf44f4ec550266271346d3574bd1843a8d9dd3b (patch)
tree27acfc907668f42888c22b49e31f6321ff05c1ac
parentCreate a private adapter for the DryIceClient to use inside the same communic... (diff)
downloadicetray-2bf44f4ec550266271346d3574bd1843a8d9dd3b.tar.bz2
icetray-2bf44f4ec550266271346d3574bd1843a8d9dd3b.tar.xz
icetray-2bf44f4ec550266271346d3574bd1843a8d9dd3b.zip
Add variants of fetch which allow setting the typeIdCol value
-rw-r--r--icetray/icetray/abstractDatabaseClient.h22
-rw-r--r--icetray/unittests/testIceTrayServiceI.cpp3
2 files changed, 22 insertions, 3 deletions
diff --git a/icetray/icetray/abstractDatabaseClient.h b/icetray/icetray/abstractDatabaseClient.h
index 3178ed4..80bd4c9 100644
--- a/icetray/icetray/abstractDatabaseClient.h
+++ b/icetray/icetray/abstractDatabaseClient.h
@@ -17,8 +17,7 @@ namespace IceTray {
Domain
fetch(const SqlSource & sql, const Params & ... params)
{
- auto c = db->get();
- return fetch<Domain, Params...>(c.get(), sql, params...);
+ return fetch<Domain, Params...>(IceUtil::None, sql, params...);
}
template<typename Domain, typename ... Params>
@@ -26,9 +25,26 @@ namespace IceTray {
Domain
fetch(DB::Connection * c, const SqlSource & sql, const Params & ... params)
{
+ return fetch<Domain, Params...>(c, IceUtil::None, sql, params...);
+ }
+
+ template<typename Domain, typename ... Params>
+ inline
+ Domain
+ fetch(const IceUtil::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 IceUtil::Optional<std::string> & typeIdCol, const SqlSource & sql, const Params & ... params)
+ {
auto s = sql.select(c);
bind(0, s.get(), params...);
- return Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, Domain>(*s);
+ return Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, Domain>(*s, typeIdCol);
}
template<typename Param, typename ... Params>
diff --git a/icetray/unittests/testIceTrayServiceI.cpp b/icetray/unittests/testIceTrayServiceI.cpp
index 73cf3a9..138e87b 100644
--- a/icetray/unittests/testIceTrayServiceI.cpp
+++ b/icetray/unittests/testIceTrayServiceI.cpp
@@ -42,6 +42,9 @@ namespace TestIceTray {
// Test we can extend to bind other things
Foo foo;
fetch<int>(sql::testIceTrayServiceTestSql, Foo(), foo);
+ // Test we can provide our own DB connection
+ auto dbc = db->get();
+ fetch<int>(dbc.get(), sql::testIceTrayServiceTestSql, 1, 1);
}
void TestIceTrayServiceI::method2(Ice::Int id, const std::string & name, const Ice::Current &)