From fe8d59232101842c06b87c801a6c393a550625d2 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Fri, 4 Mar 2022 18:02:40 +0000 Subject: Add modify support to db client --- icetray/icetray/abstractDatabaseClient.h | 18 ++++++++++++++++++ icetray/unittests/Jamfile.jam | 2 ++ icetray/unittests/testIceTray.cpp | 1 + icetray/unittests/testIceTrayReplace.cpp | 5 +++++ icetray/unittests/testIceTrayService.ice | 1 + icetray/unittests/testIceTrayServiceI.cpp | 7 +++++++ icetray/unittests/testIceTrayServiceI.h | 1 + icetray/unittests/testIceTrayServiceTestSqlUpdate.sql | 1 + 8 files changed, 36 insertions(+) create mode 100644 icetray/unittests/testIceTrayServiceTestSqlUpdate.sql diff --git a/icetray/icetray/abstractDatabaseClient.h b/icetray/icetray/abstractDatabaseClient.h index 047eaee..cc81251 100644 --- a/icetray/icetray/abstractDatabaseClient.h +++ b/icetray/icetray/abstractDatabaseClient.h @@ -7,6 +7,7 @@ #include #include // IWYU pragma: keep #include +#include // IWYU pragma: keep #include #include #include // IWYU pragma: keep @@ -54,6 +55,23 @@ namespace IceTray { return Slicer::DeserializeAny(s.get(), typeIdCol); } + template + inline auto + modify(const SqlSource & sql, const Params &... params) + { + auto c = db->get(); + 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(0, s.get(), params...); + return s->execute(); + } + protected: template static void inline bind(unsigned int offset, DB::Command * cmd, const Param & p, const Params &... params) diff --git a/icetray/unittests/Jamfile.jam b/icetray/unittests/Jamfile.jam index f324bbd..8677793 100644 --- a/icetray/unittests/Jamfile.jam +++ b/icetray/unittests/Jamfile.jam @@ -53,6 +53,7 @@ run testIceTrayService testIceTrayServiceI.cpp testIceTrayServiceTestSql.sql + testIceTrayServiceTestSqlUpdate.sql subdir/some.sql subdir/a/more.sql : : : @@ -77,6 +78,7 @@ run testIceTrayService testIceTrayServiceI.cpp testIceTrayServiceTestSql.sql + testIceTrayServiceTestSqlUpdate.sql subdir/some.sql subdir/a/more.sql : : : diff --git a/icetray/unittests/testIceTray.cpp b/icetray/unittests/testIceTray.cpp index 8277adb..b704864 100644 --- a/icetray/unittests/testIceTray.cpp +++ b/icetray/unittests/testIceTray.cpp @@ -39,6 +39,7 @@ BOOST_AUTO_TEST_CASE(services) p->ice_ping(); p->method1(); p->method2(1, "test"); + p->method3(); } BOOST_AUTO_TEST_CASE(cube_services_proxy) diff --git a/icetray/unittests/testIceTrayReplace.cpp b/icetray/unittests/testIceTrayReplace.cpp index a56e89d..36b764b 100644 --- a/icetray/unittests/testIceTrayReplace.cpp +++ b/icetray/unittests/testIceTrayReplace.cpp @@ -23,6 +23,11 @@ namespace TestIceTray { method2(Ice::Int, std::string, const Ice::Current &) override { } + Ice::Int + method3(const Ice::Current &) override + { + return 0; + } }; } diff --git a/icetray/unittests/testIceTrayService.ice b/icetray/unittests/testIceTrayService.ice index fc0caf4..323967a 100644 --- a/icetray/unittests/testIceTrayService.ice +++ b/icetray/unittests/testIceTrayService.ice @@ -2,6 +2,7 @@ module TestIceTray { interface TestIceTrayService { void method1(); void method2(int id, string name); + int method3(); }; local interface TestCube { diff --git a/icetray/unittests/testIceTrayServiceI.cpp b/icetray/unittests/testIceTrayServiceI.cpp index 7e79359..fce0992 100644 --- a/icetray/unittests/testIceTrayServiceI.cpp +++ b/icetray/unittests/testIceTrayServiceI.cpp @@ -18,6 +18,7 @@ #include #include #include +#include // IWYU pragma: no_include "plugins.impl.h" // IWYU pragma: no_include "resourcePool.impl.h" @@ -88,6 +89,12 @@ namespace TestIceTray { == (fetchCache(sql::testIceTrayServiceTestSql, 10, id, name))); } + Ice::Int + TestIceTrayServiceI::method3(const Ice::Current &) + { + return static_cast(modify(sql::testIceTrayServiceTestSqlUpdate, 5)); + } + void TestCubeI::method1() { diff --git a/icetray/unittests/testIceTrayServiceI.h b/icetray/unittests/testIceTrayServiceI.h index ee5db40..94b4f87 100644 --- a/icetray/unittests/testIceTrayServiceI.h +++ b/icetray/unittests/testIceTrayServiceI.h @@ -21,6 +21,7 @@ namespace TestIceTray { void method1(const Ice::Current &) override; void method2(Ice::Int id, std::string name, const Ice::Current &) override; + Ice::Int method3(const Ice::Current &) override; private: template void fetchTest(const Type & value); diff --git a/icetray/unittests/testIceTrayServiceTestSqlUpdate.sql b/icetray/unittests/testIceTrayServiceTestSqlUpdate.sql new file mode 100644 index 0000000..33e3862 --- /dev/null +++ b/icetray/unittests/testIceTrayServiceTestSqlUpdate.sql @@ -0,0 +1 @@ +UPDATE testTable SET name = 'update' WHERE id = ? -- cgit v1.2.3