diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2022-03-04 18:02:40 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2022-03-04 18:02:40 +0000 |
commit | fe8d59232101842c06b87c801a6c393a550625d2 (patch) | |
tree | bff30162bb45d6c95d280514f1f43bbdea30696b | |
parent | Make the database clients free to be used as variables, not just inheritted (diff) | |
download | icetray-fe8d59232101842c06b87c801a6c393a550625d2.tar.bz2 icetray-fe8d59232101842c06b87c801a6c393a550625d2.tar.xz icetray-fe8d59232101842c06b87c801a6c393a550625d2.zip |
Add modify support to db client
-rw-r--r-- | icetray/icetray/abstractDatabaseClient.h | 18 | ||||
-rw-r--r-- | icetray/unittests/Jamfile.jam | 2 | ||||
-rw-r--r-- | icetray/unittests/testIceTray.cpp | 1 | ||||
-rw-r--r-- | icetray/unittests/testIceTrayReplace.cpp | 5 | ||||
-rw-r--r-- | icetray/unittests/testIceTrayService.ice | 1 | ||||
-rw-r--r-- | icetray/unittests/testIceTrayServiceI.cpp | 7 | ||||
-rw-r--r-- | icetray/unittests/testIceTrayServiceI.h | 1 | ||||
-rw-r--r-- | icetray/unittests/testIceTrayServiceTestSqlUpdate.sql | 1 |
8 files changed, 36 insertions, 0 deletions
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 <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 @@ -54,6 +55,23 @@ namespace IceTray { return Slicer::DeserializeAny<Slicer::SqlSelectDeserializer, Domain>(s.get(), typeIdCol); } + template<typename... Params> + inline auto + modify(const SqlSource & sql, const Params &... params) + { + auto c = db->get(); + 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(0, s.get(), params...); + return s->execute(); + } + protected: template<typename Param, typename... Params> 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 <subdir/a/more.sql.h> #include <subdir/some.sql.h> #include <testIceTrayServiceTestSql.sql.h> +#include <testIceTrayServiceTestSqlUpdate.sql.h> // IWYU pragma: no_include "plugins.impl.h" // IWYU pragma: no_include "resourcePool.impl.h" @@ -88,6 +89,12 @@ namespace TestIceTray { == (fetchCache<int>(sql::testIceTrayServiceTestSql, 10, id, name))); } + Ice::Int + TestIceTrayServiceI::method3(const Ice::Current &) + { + return static_cast<Ice::Int>(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<typename Type> 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 = ? |