diff options
-rw-r--r-- | icetray/icetray/abstractDatabaseClient.h | 22 | ||||
-rw-r--r-- | icetray/unittests/testIceTrayServiceI.cpp | 3 |
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 &) |